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