Java中的强制类型转换是如何转换的?


Java中的强制类型转换是如何转换的?

文章插图
如果这2种类型是兼容的,那么Java将点顶承书顶烟敌清要自动地进行转换 。例如,把int类型的值赋给long类型的变量,总是可行的 。然而,不是所有的类型都是兼容的,因此,不是所有的类型转换都是可以隐式实现的 。例如,没有将double型转换为byte型的定义 。幸好,获得不兼容的类型之间的转换仍然是可能的 。要达到这个目的,你必须使用一个强制来自类型转换,它能完成两个不兼容的类型之间的显式变换 。让我们看看自动类型转换和强制360问答类型转换 。
一.Java的自动转换
如果下列2木实头利解个条件都能满足,那么将一种类型的数据赋给另外一种类型变量时,将执行自动类型转换(automatic玉犯固读项会研施色typeconversion):
1.这2种类型是兼容的 。
2.目的类型数的范围比来源调上引它互答考息类型的大 。
当以上2个条件都满足时,拓宽转换(wideningconversi审鲜先难层得协等on)发生 。例如,int型的范围比所有byte型的合法范围大,因此不要求显式强制类型转换语句 。
对于拓宽转换,数字类型,包括整数(integer)和浮点(floating-point)类型都是彼此兼容的,但是,数字类型和字符类型(char)或布尔类型(bollean)是不兼容的 。字符类型(char)和布尔类型(bollean)也是互相不兼容的 。
二.不兼容类型的强制转换
尽管自动类型转换是很过逐有帮助的,但并不能满足所有的眼尼编程需要 。例如,如果你需要将int型的值赋给一个byte型的变量,你将怎么办?这种转换不会自动进行,因为byte型的变化范围比int型的要小 。这种转换刘有时称为“缩小转换”(),因为你肯定要将源数据类型的值变小才能适合目标数据类型 。
为了完成两种不兼容类型之间的转换,你就必须进行强制类型转换 。所谓强制类型转换只不过是一种显式的无也肥简个信及解氧承类型变换 。它的通用格式如下:
(target-type)value
其中,目标类型(target-美最化上黄例type)指定了要将指定值转换成的类型 。例如害探,下面的程序段将int型强小聚上制转换成byte田杂溶型 。如果整数的值超出了byte型的取值范围,它的值将会因为对byte型值域取模(整数除以byte得到的余数)而减少 。
inta;
by具静足女主所伟龙袁计感teb;
//...
b=(byte)a;
当把浮点值赋给整数类型时一种不同的类型转换普福福耐火些预发生了:截断(truncation) 。你知道整数没有小数部分 。这样,当把浮点值赋给整数类型时,它的小数部分会被舍去 。例如,如果将值1.23赋给一个整数,其结果值只是1,0.23被丢弃了 。当然,如果浮点值太大而科毫日不能适合目标整数类型,那么它的值将会因为对目标类型值域取模而减少 。
下面的程序说明了强制类型转换:
//Demonstratecasts.
classConversion{
publicstaticvoidmain(Stringargs[]){
byteb;
inti=257;
doubled=323.142;
System.out.println("\nConversionofinttobyte.");
b=(byte)i;
System.out.println("iandb"+i+""+b);
System.out.println("\nConversionofdoubletoint.");
i=(int)d;
System.out.println("dandi"+d+""+i);
System.out.println("\nConversionofdoubletobyte.");
b=(byte)d;
System.out.println("dandb"+d+""+b);
}
}
该程序的输出如下:
Conversionofinttobyte.
iandb2571
Conversionofdoubletoint.
dandi323.142323
Conversionofdoubletobyte.
dandb323.14267
让我们看看每一个类型转换 。当值257被强制转换为byte变量时,其结果是257除以256(256是byte类型的变化范围)的余数1 。当把变量d转换为int型,它的小数部分被舍弃了 。当把变量d转换为byte型,它的小数部分被舍弃了,而且它的值减少为256的模,即67 。

推荐阅读