3.5 类型转换
我们知道Java是强类型语言,有些运算需要用到类型转换。
运算中,不同类型的数据先转化为同一类型,然后进行运算
低--------------------------------------->高
byte,short,char->int->long->float->double
低和高指的是容量,字节大小
public class Demo05{
public static void main(String[]args){
int i = 128;
byte b = (byte)i;//强制类型转换,将int类型转换成byte类型
System.out.println(i);
System.out.println(b);
}
}
//---------------------------------------输出结果为
128
-128
之所以会是-128是因为byte最大值为127,此时就会内存溢出的问题。
在转换的时候要注意内存溢出
强制类型转换:这是一种从高到低的转换
//强制类型转换
(类型)变量名
自动类型转换:是从低到高的转换
public class Demo05{
public static void main(String[]args){
int i = 128;
double b = i;//从低到高的转换,不需要任何的修饰符
System.out.println(i);
System.out.println(b);
}
}
//---------------------------------------输出结果为
128
128.0
注意点
/*
注意点
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 把高容量转换到低容量的时候,需要强制转换,反之不用强制
4. 转换的时候可能存在内存溢出或者精度问题!
*/
public class Demo05{
public static void main(String[]args){
System.out.println((int)23.7);
System.out.println((int)-45.89f);
char c = 'a';
int d = c+1;
System.out.println(d);
System.out.println((char)d)
}
}
//---------------------------------------输出结果为
23
-45
98
b
常见问题
/*
1. 操作比较大的数的时候,注意溢出问题
2. JDK7新特性,数字之间可以用下划线分割,而下划线并不会被输出,只是为了区分方便
*/
public class Demo06{
public static void main(String[]args){
int money = 10_0000_0000;
System.out.println(money);
int years =20;
int total =money*years;
System.out.println(total);
long total2 = money*years;
System.out.println(total2);
long total3 = money*((long)years);
System.out.println(total3);
}
}
//---------------------------------------输出结果为
1000000000
-1474836480//这就是因为计算时内存溢出
-1474836480//因为money与years都是int类型,相乘之后默认也会被认为是int类型,计算完之后才把结果转换为long类型,此时结果还是溢出,也就是说转换之前已经出现问题了。
20000000000