基本数据类型转换
自动类型转换:容量小的类型自动转换为容量大的那种数据类型,然后再进行计算
byte, short, char之间不会相互转换,他们之间在计算时首先转化为int类型
当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值都将自动转换为字符串类型
通常字符串不能直接转换为基本数据类型,但通过基本类型对应的包装类则可以实现把字符串转换为基本类型
String a = "123"; int i = Integer.parseInt(a);
boolean类型不可以转换为其它数据类型
赋值与运算符
System.out.println(1 + 2 + "test") --> 3test
System.out.println("test" + 1 + 2) --> test12
System.out.println('a' + 1 + "test") --> 98test //char类型的数据在和数字进行数学运算的时候,它是先转换为ASCII码的值在计算
System.out.println("test" + 'a' + 1) --> testa1
short s = 1
s = s + 2 //变量参与运算的时候,java程序不知道具体的这个变量在运算完之后的会不会超出当前变量的范围,所以会先把变量转换为更大的类型,这里根据2的类型转化为int
正确写法为:
s = (short)(s + 2)
s += 2 //在使用扩展运算符时,变量在参与运算时会把结果自动强制转换为当前变量的类型
a = 2; b = ++a; --> a=3; b=3 //先运算后取值
a = 2; b = a++; --> a=3; b=2 //先取值后运算
逻辑运算符
逻辑运算符用于连接布尔型表达式,在java中不可以写成3<x<6,应该写成 x>3 & x<6
&(逻辑与) 和 &&(短路与)区别:
&: 左边无论真假,右边都参与运算
&&:左边为真,右边参与运算,左边为假,右边不参与运算
|(逻辑或) 和 ||(短路或)同理
^(异或):追求的是"异", 只要两边相同就为false,不同为true
!(逻辑非)
int i = 0;
int j = 1;
System.out.println(i != 0 & ++j == 2) --> false
System.out.println(j) --> 2
System.out.println(i != 0 && ++j == 2) --> false
System.out.println(j) --> 1 //前面为false,右边表达式没有运算j不变