一、 类型转换
为什么需要类型转换?
原因:开发中会存在不同类型的变量或者数据复制给其他类型的变量,也存在不同类型的数据一起运算,其结果类型要确定下来。
自动类型转换
原理:小范围类型可以直接复制给大范围类型的变量
char赋值的字符如果赋值给int类型变量,这个变量存储的是该字符的ASCII码值。
表达式的自动类型转换
含义:在表达式(表达式就是运算式子)中,小范围类型的变量会自动提升成大范围运算。表达式的运算顺序是从左到右的。
结论:表达式的最终结果数据类型是由表达式的中最大字节大小的数据类型决定的,最大类型是什么结果数据就是什么。
注意:byte short char 在表达式中是直接升级成int类型来运算的
面试笔试题:
byte b1 = 21;
byte b2 = 22;
//idea会报错,右边是int类型却复制给byte类型,会出现数据缺省。
byte b3 = b1 + b2;
//正确写法
int b3 = b1 + b2;
强制类型转换
含义:大范围类型的变量或者数据不能直接赋值给小范围类型的变量,否则报错!必须进行强制类型转换才可以。
格式: 数据类型 变量 = (数据类型)其他类型的变量/数据
int a = 1500;
byte b = (byte)a;
注意:强制类型转换可能出现数据丢失,浮点型类型的变量或者数据强制转换成整型,保留整数部分返回的,小数部分直接不要了。
二、运算符
+符号做连接符
场景:+符号与字符串一起运算时,充当连接符,连接后的结果还是一个字符串。与变量一起运算时,会输出字符串和变量里面的值连在一起。
识别技巧:能算则算,不能算大家连在一起。
注意事项:放在变量前面和后面的区别不一样(和c语言一样)
拓展案例:
System.out.println("-----------拓展案例(可以了解和参考)--------------");
int k = 3;
int p = 5;
// k 3 4 5 4
// p 5 4 3 4
// rs 3 + 5 - 4 + 4 - 5 + 4 + 2
int rs = k++ + ++k - --p + p-- - k-- + ++p + 2;
System.out.println(k); // 4
System.out.println(p); // 4
System.out.println(rs); // 9
赋值运算符
基本的赋值运算符就是"=",从右往左的进行赋值。
下图是扩展赋值运算符:
扩展赋值运算符都隐含了强制类型转换。
byte b1 = 2;
byte b2 = 3;
b1 += b 就等价于 byte b3 = (byte)(b1+b2)
关系运算符
对数据进行条件判断的符号,返回一个比较的布尔类型结果(false,true)
逻辑运算符
多个条件的布尔结果放在一起运算,最终返回一个布尔结果
还有特殊的短路与/或运算符:不用两边都执行,逻辑与/或无论左边是false还是true,右边都要执行。
三元运算符
格式:条件表达式?值1:值2;
执行流程:首先计算条件表达式的值,如果值为true返回值1,反之返回值2。
注意,可以多层嵌套:
System.out.println("-------------拓展知识-------------");
//这是从三个整数值找出最大值的案例
int rsMax1 = i > j ? (i > k ? i : k) : (j > k ? j : k);
System.out.println(rsMax1);
运算符优先级
运算符存在谁先谁后执行的情况:
注意:
1、()优先级最高
2、*/ 高于 +-
3、特别要注意的是:&& 优先级高于||,&优先级高于||,一定要先运算&和&&符号