类型转换
原因:开发中会存在不同类型的变量或者数据赋值给其他类型的变量,也存在不同类型的数据一起运算,其结果类型要确定下来
自动类型转换
原理:小范围类型的变量可以直接赋值给大范围类型的变量
范围信息:
形式:
- byte a = 20;
- int b = a;
注意这种形式是可以的:
- char ch = 'a';
- int code = ch;
表达式的自动类型转换
含义:在表达式中,小范围类型的变量会自动提升成大范围运算
结论:表达式的最终结果数据类型是由表达式在的最高数据类型决定的,最高数据类型是什么,其结果数据的类型就是什么。
注意: byte short char 在表达式中,是直接提升成int运算
面试笔试题: byte b1 =21; byte b2 =22
- byte b3 = b1 + b2; //错误形式
- int b3 = b1 + b2;
- byte b3 = (byte) (b1 + b2);
强制类型转换
含义:大范围类型的变量或者数据不能直接赋值给小范围类型的变量,否则报错!必须进行强制类型转换才可以。
格式:数据类型 变量 = (数据类型)其他类型的变量/数据
注意:强制类型转换可能出现数据丢失
- int a = 1500;
- byte b = (byte)a;
注意:浮点型类型的变量或者数据强制转换成整型,保留整数部分返回的,小数部分直接不要了
- double a = 99.5;
- int i = (int)a; // i == 99
运算符
基本运算符
常见的:+ - * / %
注意:/ 两个整数相除的结果一定是整数
- 10 / 3 ==3
- 1.0 * 10 / 3 ==3.33...
+符号做连接符
场景:+符号与字符串一起运算时,充当连接符,连接后的结果还是一个字符串。
识别技巧:能算则算,不能算大家连在一起
自增自减运算符
++
- 对变量进行+1操作
--
- 对变量进行-1操作
注意事项
- 只能操作变量,不能操作字面量
• a++; //没毛病
• 2++; //没有这种形式,报错!
- ++ -- 单独使用,放在变量前后,没有区别;
• a++;++a;
- ++ -- 如果不是单独使用,放在变量前后有明显区别
• 在变量前面:先+1,-1再使用变量
• 在变量后面:先使用变量,再对变量+1 -1
赋值运算符
=,+=,-=,*=,/=,%=
a += b
- 等价于:a =(a的类型)(a + b);
- 用处:
• 适合做数据的累加操作
• int a = 10;
• int b = 5;
• a += b;
• 自带强制类型转换
• byte b1 =2;
• byte b2 =3;
• byte b3 =(byte)(b1 + b2); ==> b1 += b;
关系运算符
== 、= > > + < <=
判断是否满足条件的,返回true 和 false
- int age = 19;
- System.out.println(age >= 18);
- 以下代码是另一种写法形式
- boolean rs = age >= 18;
- System.out.println(rs);
逻辑运算符
&、&& |、|| ! ^
与
- &(逻辑与):且的意思,必须前后都true,结果是才是true
- &&(短路与):且的意思,必须前后都是true,结果才是true
- 区别:&&如果发现前面是false后面不执行,直接返回结果,性能较好一点,用的更多一点。
或
- |(逻辑或):或的意思,只要前后有一个是true,结果就一定是true
- | |(短路与):或的意思,只要前后有一个是true,结果一定是true
- 区别:| |如果是发现前面是 true 后面不执行,直接返回结果,性能较好一点,用的更多一点。
!
- 取反 !false = true !true = false
^异或操作:前后一样返回false,前后不一样返回true
三元运算符
做分支选择的,关键是格式
- 条件表达式?值1:值2;
运算符优先级
运算符存在谁先谁后执行的情况
- ()优先级的最高
- * / 高于 + -
- && 优先级高于 | |