一、 类型转换

为什么须要类型转换?
起因:开发中会存在不同类型的变量或者数据复制给其余类型的变量,也存在不同类型的数据一起运算,其后果类型要确定下来。

主动类型转换
原理:小范畴类型能够间接复制给大范畴类型的变量

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、特地要留神的是:&& 优先级高于||,&优先级高于||,肯定要先运算&和&&符号