数据类型转换
在java中,任何情况下,整数型的字面量默认都被当做int类型处理。
如果希望该整数型字面量被当做long类型来处理,需要在字面量后面添加L/l,建议使用L,小写和1差不多。
自动类型转换
小容量可以自动赋值给大容量;这种操作被称为自动类型转换。
注意:如果字面量本身在赋值前就超过int的范围,就会在赋值前报错
强制类型转换
大容量不允许直接向小容量赋值,编译会报错,可以使用强制转换符,但是转换后会损失精度。
long x = 100L;
int y =x;//编译报错,需要写成强制类型转换符,格式如下
//数据类型 变量名=(数据类型)变量名;
注意:强制类型转换后将会将原有数据类型的字节数“砍断”剩余至被强制转换后的数据类型字节数,如上述long类型8字节强转后剩余int类型4字节数
数据类型转换规则
- 1、八种数据类型中,除去Boolean不能转换,其余都可以。
- 2、如果整数字面量没有超过byte、short、char、的取值范围,可以直接赋值该三种类型的变量。
- 3、小容量转换大容量为自动类型转换,容量从小到大的排序为:byte<short(char)<int<long<flort<double,其中short和char都占用两个字节,但是char可以表示更大的正整数。
- 4、大容量转换小容量为强制类型转换,编写时必须添加强制类型转换符,但是运行时可能会出现精度损失,谨慎使用。
- 5、byte,short,char类型混合运算时,先各自转换为int类型再做运算,他们之间不能相互转换(重点)
- 6、多种数据类型混合运算,各自先转换成容量最大的那一种再运算
运算符
关系运算符
所有关系运算符的运算结果都是布尔类型。
注意:关系运算符之间不能有空格
<=对的,< =不对的
逻辑运算符(&,|,&&,||,!)
- 逻辑运算符两边要求字面值是布尔类型,其他数据类型的字面值是错误的,并且运算结果也是布尔类型,这是逻辑运算符的特点。
- &两边有一个false,结果就是false
- |两边有一个true,结果就是true
- 短路与&&和逻辑&运行结果没有区别,完全相同,只是&&会发生短路现象。
- 什么是短路现象呢?
- 使用短路与&&的时候,左边的表达式为false的时候,右边的表达式不执行,这种现象就是短路现象,而逻辑与&并没有这个现象,它两边的表达式都会执行,代码执行效率低于短路与&&。
- 什么时候用&&?
- 大部分时候使用&&,只有在特殊业务两边表达式都需要执行的时候使用&。
- 短路或||道理相同。
赋值运算符
赋值运算符分为基本赋值运算符=,和扩展赋值运算符+=,*=,/=,%=
赋值运算符=右边优先级高,限制性右边的表达式
i+=10,和 i = i+10一样吗
不一样,相似,本质完全不一样。
重要的语法机制:使用扩展赋值运算符的时候,永远不会改变运算结果的数据类型。
byte i = 1;
i +=1;//该代码等同于强制转换i = (byte)(i + 1);
注意:如果所+数值结果超出原有变量数据类型的范围,将会损失精度。
条件运算符(又叫三目运算符或者三元运算符)
语法格式:
布尔表达式?表达式1:表达式2
执行原理是:
布尔表达式的结果为true时,表达式1的结果就是整个运算符的结果
布尔表达式的结果为false时,表达式2的结果就是整个运算符的结果
注意:条件运算符不能单独为代码语句,需要表达式值数据类型相同类型的变量接受
运算符优先顺序:
算术运算符>关系运算符>逻辑运算符>赋值运算