1 public class Demo2 { 2 public static void main(String[] args) { 3 //byte/short/char->int->long->float->double 4 // 低->高 5 //运算中,不同类型的数据要先转换成同一类型,再进行运算。 6 int i = 128; 7 byte b = (byte)i; //存在内存溢出的问题 高->低 8 double d = i;// 低->高 9 System.out.println(i); 10 System.out.println(b); 11 12 //强制转换 (类型)变量名 高->低 13 //自动转换 低->高 14 15 /* 16 注意点: 17 1.不能对布尔类型进行转换 18 2.不能把对象类型转换成不相干的类型 19 3.在把高容量转换到低容量时,强制类型转换 20 低容量到高容量,自动类型转换 21 4.转换的时候可能存在内存溢出或者精度问题。 22 */ 23 } 24 }
操作比较大的数字的时候,要注意溢出问题
1 public class Demo2 { 2 public static void main(String[] args) { 3 int money = 10_0000_0000; 4 int year = 20; 5 int money2 = money * year; 6 System.out.println(money2); 7 } 8 }
这里计算后的结果超出的int的存储范围,计算出错
1 public class Demo2 { 2 public static void main(String[] args) { 3 int money = 10_0000_0000; 4 int year = 20; 5 long money2 = money * year; 6 System.out.println(money2); 7 8 } 9 }
就算计算后的结果存储为long也没有用,因为是先计算后转换,在计算时已经出错了,转换过后的也是错误的,所以,应该在计算前进行转换。
1 public class Demo2 { 2 public static void main(String[] args) { 3 int money = 10_0000_0000; 4 int year = 20; 5 long money2 = money * (long)year; 6 System.out.println(money2); 7 } 8 }
原文:https://www.cnblogs.com/yook/p/13159436.html