k11_类型转换
类型转换
在我们正常学习java的时候会遇到一些类型转换的问题,如:一个整形转换为字符型,或者一个浮点型转换为一个整形。
类型转换有自动类型转换和强制类型转换两种:
- 自动类型转换
- 小到大
- 如:int类型到long类型
- 强制类型转换
- 大到小,因为大到小就如同大杯子的水倒入到小杯子中,小杯子不够会造成水满溢出,类型转换也是这样,long到int存储值过大会导致内存不够而造成内存溢出。
- 如:long类型到int类型
注意:
- 不能对布尔值进行类型转换;
- 不能把对象类型转换为不相干的类型;
- 在把高容量转换到低容量的时候,进行强制转换
- 转换的时候可能跟存在内存溢出,或者精度问题
int c=111;
long l=c;//自动类型转换---int->long
int d=(int)l;//强制类型转换---long->int
System.out.println(l);//111
System.out.println(d);///111
int a=128;
byte b=(byte) a;//强制类型转换
System.out.println(b);//-128的原因是因为内存溢出了
System.out.println((int)11.22);//11
System.out.println((int)-131.22f);//131
输出
111
111
-128
11
-131
Process finished with exit code 0
类型转换越界问题如下所示:
public class Test5 {
public static void main(String[] args) {
//自动进行类型转换
/*
* 操作大数字的时候会有类型溢出的问题
* */
int a=10_0000_0000;//目前JDK7以上的版本,数字都可以用下划线隔开可以更加的简便的看出来数字的值
int b=30;
int num=a*b;
System.out.println(num);//-64771072 内存溢出
//我们可以转换为long类型来接收查看
long nums=a*b;
System.out.println(nums);//-64771072 可以看到还是不行,这个是因为我们根本就没有转换成功,在转换之前就已经开始计算得出结果了
//我们需要先进行转换,在进行计算
long nums1=a*(long)b;//只需强制转换一个值的类型,其余参与计算的值可以自动升型,在本题中a自动将int类型转换为long类型
System.out.println(nums1);//30000000000 输出成功
}
}
结果:
-64771072
-64771072
30000000000
Process finished with exit code 0

浙公网安备 33010602011771号