java类型转换的要求_Java数据类型转换:自动类型转换+强制类型转换(六)

在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换。

自动类型转换(隐式转换)

例如:

f66a978b1cc457a20cd9f309dce56e47.png

代码中int型变量score1可以直接为double型变量score2完成赋值操作,运行结果为:82.0

这种转换称为自动类型转换。

自动类型转换要满足以下2个条件:

- 两种数据类型彼此兼容。如:double型兼容int型,但是char型不能兼容int型

- 目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)。如:double类型长度为8字节,int 类型为4字节,因此double类型的变量里直接可以存放int类型的数据,但反过来就不可以了

b7a0b6d938a03f3fe47534182d5890d5.png 

4b5894d1e15fcf185bd4b270eeed0482.png

在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:

- 数值型数据的转换:byte→short→int→long→float→double。

- 字符型转换为整型:char→int。

以上数据类型的转换遵循从左到右的转换顺序,最终转换成表达式中表示范围最大的变量的数据类型。

71e7e7dd0cc3848896590a140c4b02b1.png运行结果:

e5ffe7c83605053144e8372b2c022609.png

从执行结果看出,float、int 和 double 三种数据类型参与运算,最后输出的结果为 double 类型的数据。这种转换一般称为“表达式中类型的自动提升”。

自动类型提升有好处,但它也会引起令人疑惑的编译错误。例如,下面看起来正确的程序却会引起问题:

byte b = 50;

b = b * 2;    // Type mismatch: cannot convert from int to byte

如上所示,第二行会报“类型不匹配:无法从int转换为byte”错误。

该程序试图将一个完全合法的byte型的值 50*2 再存储给一个 byte 型的变量。但是当表达式求值的时候,操作数被自动的提升为int型,计算结果也被提升为int型。这样表达式的结果现在是int型,不强制转换它就不能被赋为byte型。

此时,被赋的值将仍然适合目标类型。所以应该使用一个显式的强制类型转换,例如:

byte b = 50;

b = (byte)(b*2);

这样就能产生正确的值 100。

注意:char类型比较特殊,char自动转换成int、long、float和 double,但byte和short不能自动转换为 char,char也不能自动转换为byte或short。

强制类型转换(显式转换)

尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。例如:当程序中需要将double型变量的值赋给一个int型变量,该如何实现呢?

显然,这种转换是不会自动进行的。因为int型的存储范围比double型的小。这种转换为“缩小转换”,因此肯定要将源数据类型的值变小才能适合目标数据类型。

当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。

语法格式:(type)variableName

其中,type为variableName要转换成的数据类型,而variableName是指要进行类型转换的变量名称。

681bbdd9d9d5a1aed404e2a4a5e6a8a7.png运行结果:

1297efd9c201d502c8d04fbe6860fbd7.png

上述代码中首先将double类型变量b的值强制转换成int类型,然后将值赋给a,但是变量b本身的值是没有发生变化的。

在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。

1c58f87f968fc90e6bad9255e74cfffd.png运行结果:

bb97ca9b989d6e358320f53ea2aa593d.png

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值