java运算符的详细讲解(java学习笔记二)
变量的注意事项:类型转换:,现在小编就来说说关于java运算符的详细讲解?下面内容希望能帮助到你,我们来一起看看吧!
java运算符的详细讲解
变量的注意事项:
- 变量在使用之前必须先赋值,不使用可以不赋值
- 变量可以连续定义
- 变量只在当前范围内有效
- 变量在同一个范围内,不能定义相同的名字
类型转换:
首先要知道为什么要进行类型转换?
不同的数据类型是无法进行运算的,必须把它们统一为同一种数据类型才可以进行运算。
类型转换分为隐式类型转换和强制类型转换,下面分别介绍。
- 隐式类型转换
是从小范围的数据类型转换为大范围的数据类型,分为两种情况:第一种是比int小的数据类型在运算时,都会提升为int类型去运算;第二中是比int大的数据类型在运算时,小范围数据类型会转换为大范围数据类型去运算。
- 强制类型转换
是从大范围的数据类型转换为小范围的数据类型,举例如下:
byte a=(byte)100;
分为三种情况:第一种是转换之后数据发生改变,这种情况没有意义,一般情况下不使用;第二种情况是转换之后数据类型不发生改变;第三种情况是转换之后小数变为整数。
接下来我们要注意几个注意事项:
- boolean类型不参加任何类型转换
我们知道,布尔类型只有两个取值true和false;其他的数据类型之间,无论是短整型、长整型,单精度浮点型、双精度浮点型,都可以进行数据转换,例如int类型的30转换为short类型的30,但无论是true和false转为其他类型还是其他类型转为true和false都是不能实现的。例如:true能转为30吗?20能转为false吗?显然不能。
- 常量优化机制
首先明确,只有比int小的数据类型才有常量优化机制。常量默认是int数据类型,常量优化机制是比int小的数据类型A在和常量进行运算时,常量的数据类型自动转换为数据类型A,它的原理是在计算机底层,对其进行了强制类型转换。举个例子:
byte a=100;//在这个语句中,常量100默认是int类型,当它赋值给变量a时编译应该报错,但事实却是能够成功运行,原因就是byte类型具有常量优化机制,在底层执行了这样的操作:byte a=(byte)100;
- long数据类型后加L;float数据类型后加F
因为long数据类型的范围大于int数据类型的范围,而常量默认为int类型,因此会出现下面这个语句的问题:
System.out.println(“4000000000”);//4000000000的取值范围超出了int的取值范围,此时运行,编译会报错,因此需要在其后面加上L,以区分int和long;
至于float数据类型后加F,我们来看这样一个例子:
float a=3.14;
System.out.println(a);
此时编译就会报错,因为小数默认是double类型,float和double的取值范围都大于int,不具有常量转化机制,因此定义float类型是必须在后面加上F,表示这个数据是float类型,而不是默认的double类型。
下面给出基本数据类型的取值范围大小比较:
byte < short = char < int < long < float < double
运算符:
运算符主要学习以下五种:算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符。下面分别介绍。
- 算数运算符( 、-、*、/、%)
这里重点说一下除(/)和取余(%)。首先看几个除法运算的例子:
System.out.println(10/3);//输出3
System.out.println(10.0/3);//输出3.0
System.out.println(10/3.0);//输出3.0
System.out.println(10.0/3.0);//输出3.0
我们发现第一条语句输出3,其余三条输出3.0。这个现象可以用类型转换来解释:不同的数据类型进行运算时必须统一为相同的数据类型,第一条语句参与运算的10和3都是int类型,因此结果也应该是int类型,所以为3;第二条语句小数10.0默认为double类型,3为int类型,根据隐式类型转换规则,小范围数据类型转换为大范围数据类型,int类型的3转换为double类型的3.0,因此结果是3.0,;其他语句也是如此。
下面是几个取余运算的例子:
System.out.println(10%3);//输出1
System.out.println(10%-3);//输出1
System.out.println(-10%3);//输出-1
System.out.println(-10%-3);//输出-1
在这里只需记住一个结论:取余运算的结果的符号与前面的数的符号相同。
除了上面5个运算符,算数运算符还有自增( )和自减(--)运算,其运算规律如下:
假如定义一个int类型的变量a等于10,无论是a 还是 a,运算后a的结果都是加一,为11;而对于式子整体的值,a 取加一之前的值,为10, a取加一之后的值,为11。对于自减运算有同样的规律。
附:字符相加,利用ASCII码表转换后进行加法运算;任何类型和字符串相加,都会自动转换为字符串类型。
- 赋值运算符(=、 =、-=、*=、/=、%=)
基本赋值运算符是=;其余5个位复合赋值运算符,用法如下:
int a=9;
a =1;//这条语句就相当于a=a 1;其他复合赋值运算符也是如此。
注意:复合赋值运算符在底层有强制类型转换,例如:
byte a=10;
a =1;//这条语句相当于a=a 1;不同数据类型运算时,比int小的自动转换为int类型,所以a 1中byte型的a转换为int类型与1相加,结果为int,再赋值给a时应该编译报错,但事实却是运行成功,这是因为在底层有a=(byte)(a 1);的强制类型转换操作。
- 比较运算符(>、<、>=、<=、==、!=)
运算结果为布尔类型。
- 逻辑运算符(&、|、!、&&、||)
运算数据和运算结果都为boolean类型,与(&)是有假则假、全真为真;或(|)是有真则真、全假为假。短路与(&&)如果第一个为假,则不用判断后面,结果为假;短路或(||)如果第一个为真,则不用判断后面,结果为真。
- 三元运算符
格式:boolea类型数据 ?值1 :值2;
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com