一、自动类型提升
byte、char、short --> int --> long --> float --> double
byte、char、short三个类型任意组合运算结果类型为int类型
float b1 = 3.14f;
//整型常量默认为int,当整型常量超过int表示的范围后,就会报错,需要加上后缀L/l
long a1 = 23423112345235234L;
byte a2 = 54;
//浮点型常量默认为double,因为float要求加F/f
float a3 = 3.14f + a2;
//整型常量默认为int类型
int a4 = a2 + 35;
short s = 3;
//错误,因为3是int型
s = s + 3;
//修改方法一
int i = s + 3;
//修改方法二
s = (short)(s + 3)
//修改方法三,该运算符不会改变运算结果的类型
s += 3;
结论:+=/ *=等运算符不会改变数据类型
int q = 1;
q *= 0.1;
//q为0的原因是1 * 0.1 = 0.1,截断为整型后为0
System.out.println(q);
q++;
System.out.println(q);
二、强制类型转换
byte a6 = (byte)128;
System.out.println(a6);
//10000000, 从int强转(截断)为byte型后,剩下这个数,用二进制表示就是补码(计算机用补码存储二进制),正好是-128
//11111111 -127(原码)
//10000000 -127(反码)
//10000001 -127(补码)
//10000000 -128(补码)
三、其他
//String类型可以与8个基本数据类型做运算:+为字符串连接符,结果均为String类型
//"\n"和"\t"才表示换行符和制表符,'\n'和'\t'只是两个字符
System.out.println('*' + "\t" + '*');
System.out.println('*' + '\t' + '*');