视频学习地址
前言
由于Java是强类型语言,所以有些时候,不同类型的数据要先转化为同一类型,然后才能进行运算。
类型转换
低—————————————————→高
byte→short→char→int→long→float→double
强制转换
public class demo {
public static void main(String[] args) {
int a = 128;
byte b = (byte)a; //byte的最大值是127,这里内存溢出了 从高往低转换需要强制转换格式:(类型)变量名
System.out.println(a); //结果是128
System.out.println(b); //结果是-128
System.out.println((int)23.7); //结果是23 精度问题
System.out.println((int)-45.89f); //结果是-45 精度问题
char c = 'a';
int d = c + 1;
System.out.println(d); //结果是98
System.out.println((char)d); //结果是b
}
}
自动转换
public class demo {
public static void main(String[] args) {
int i = 128;
double b = i; //从低往高转换会自动转换
System.out.println(i); //结果是128
System.out.println(b); //结果是128.0
}
}
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 把高容量转换为低容量的时候,需要用到强制转换
- 把低容量转换为高容量的时候,会自动转换
- 转换的时候可能会存在内存溢出或者精度问题
JDK7的新特性
public class demo {
public static void main(String[] args) {
//操作比较大的数字时,需要注意溢出问题
int money = 10_0000_0000; //数字之间可以用下划线分割 下划线并不会被输出
int years = 20;
int total = money*years;
System.out.println(total); //结果是-1474836480,计算的时候内存溢出了 由于默认是int 在转换之前就已经存在问题了
long total = (long)money*years; //所以需要在计算过程中给任意变量转换为long类型就能解决
System.out.println(total); //结果是20000000000
}
}