低----------------------------------------------------------高
byte、short、char < in t< long < float < double
运算中,不同类型的数据先转换为同一类型,然后进行运算。
高-----底 需要强制转换
public class dada { public static void main(String[] args) { int a = 128; byte b= (byte)a;//内存溢出 byte max=127 //强制转换 (类型)变量名 System.out.println(a); System.out.println(b); } } Connected to the target VM, address: '127.0.0.1:62255', transport: 'socket' -128 Disconnected from the target VM, address: '127.0.0.1:62255', transport: 'socket' Process finished with exit code 0
低--高 不用强制转换
public class dada { public static void main(String[] args) { int a = 128; double b= a; System.out.println(a); System.out.println(b); } } Connected to the target VM, address: '127.0.0.1:62283', transport: 'socket' Disconnected from the target VM, address: '127.0.0.1:62283', transport: 'socket' 128.0 Process finished with exit code 0
不能对布尔值进行转换。
不能把对象类型转换为不相干的类型。
在把低容量转换为高容量的时候,强制转换。
转换的时候可能存在内存溢出,或者精度问题!
精度问题
public class dada { public static void main(String[] args) { System.out.println((long)23.55); System.out.println((long)12.541264f); char c = 'a'; int b = c+1; System.out.println(b); System.out.println((char)b); } } Connected to the target VM, address: '127.0.0.1:62338', transport: 'socket' Disconnected from the target VM, address: '127.0.0.1:62338', transport: 'socket' b Process finished with exit code
溢出问题
public class dada { public static void main(String[] args) { int money = 10_0000_0000;//数字太大可以加下划线,不会被输出。 int year = 18; int henyouqian =money*year;//输出820130816,计算的时候溢出了 System.out.println(henyouqian);//默认是int,转换之前已经出问题了 long jindaoweihenyouqian =money*((long)year);//18000000000,输出成功,先把一个数转为long System.out.println(jindaoweihenyouqian); } }