public class Demo04 {
//Java是强类型语言,进行运算时需进行类型转换
//不同类型的数据要先转换成同一类型再进行运算
/*数据类型排序(从低到高):
byte、short、char——>int——>long——>float——>double
!!long是64,float是32,为何float比long更高?
——> 小数的优先级大于整数
*/
public static void main(String[] args) {
int i = 123;
byte b = (byte)i; //int比byte类型优先级高,所以需要强制转换
//强制转换:(类型名)变量名
//自动转换:低类型转换为高类型不需强制转换,所以不需要加(类型名)
System.out.println(i);
System.out.println(b); //输出结果都是123
System.out.println("==============================");
//注意点①:强制转换时需要注意内存溢出问题,如:
int i1 = 128;
byte b1 = (byte)i1;
System.out.println(i1); //输出结果为128
System.out.println(b1); //输出结果为-128
//因为Byte类范围时-128~127,i1的值已经超出范围,所以结果不准确
System.out.println("==============================");
//注意点②:不能对布尔值进行转换
//注意点③:不能把对象类型转换为不相干的类型
//注意点④:类型转换是可能存在精度问题,如:
System.out.println((double)25); //整数类型转换为小数类型(自动转换),结果为25.0
System.out.println((int)24.99); //小数类型转换为整数类型(强制转换),结果为24
System.out.println("==============================");
char c = 'a';
int i2 = c+1;
System.out.println(i2); //输出结果为98
//因为根据char涉及的Unicode编码表,'a'表示的数就是97
System.out.println((char)i2); //输出结果为b
System.out.println("==============================");
//操作比较大的数时,注意溢出问题
int money = 10_0000_0000; //JKD7以上新特性,数字之间可以用下划线分割且不会输出
int years = 20;
int total = money*years;
System.out.println(total); //输出结果为-1474836480,超出int范围,溢出
//下面使用long类型再输出:
long total2 = money*years;
System.out.println(total2); //输出结果还是-1474836480 ???
//money*years计算完后默认是int类型,即在转换成long之前就已经计算完了
//正确转换方法如下:
long total3 = money*((long)years); //先把一个数转化为long
System.out.println(total3); //输出结果为20000000000
}
}