黑马程序员技术交流社区
标题:
关于Java中编译器类型转换的一点疑问
[打印本页]
作者:
陈佳
时间:
2013-9-3 10:27
标题:
关于Java中编译器类型转换的一点疑问
以前看过毕向东老师的Java基础视频,里面说到关于代码:byte b = 4;
byte b1 = 3;
byte b2 = 7;
b = b1+b2;
代码编译失败的问题。
毕老师对此的解释是b1, b2为变量,无法判断是否适合b的类型。即有可能损失精度。
之后我又在网上查了查,解释是两个byte类型变量相加,数据会隐式强制转换为int类型,导致等式两边类型不一致。
两种不同的解释,不知道以哪个为准?大家帮帮我吧!
作者:
焦允
时间:
2013-9-3 11:05
a. 自动类型转换
在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。
b. 强制类型转换
可以将一个占空间较大的值使用(类型)的形式强制放入一个较小的空间,有可能损失精度。
c. 字符串转换
任何值和字符串相加都会得到字符串。
数据类型转换的时机:
a.赋值
在给byte,short进行赋值时,右边的值是一个常量或常量运算且在所对应的数据类型范围内,则进行自动的数据类型转换。
如:
byte i=1;或i=1+2; 正确
byte i=128;或i=126+2; 错误 超出了byte型表示的范围
byte i=i+1; 错误 "="右边有变量参与运算不能进行自动类型转换,只能强转。
b.二元运算
当两个操作数中存在变量,并且类型不相同时,低类型自动转换为高类型,最低转换为int(byte,short,char都会自动转
换为int型参与运算,当然如果有long类型参与运算,会再转换成long类型),然后进行计算,得到的结果是高类型,最低为int型。
如:byte i,j,t;
i=1;
j=2;
t=i+j; 右边的i和j会自动转换为int型,然后相加,最后的int型数,在赋值时必须强制转换回byte.
整型数据长变短,强制转换;短变长,自动转换
浮点数与整型进行转换时,浮点数表示的范围远大于整数表示的范围
整数转换成浮点数的时候,自动转换,格式将进行变化(出现小数点)
浮点数转换成整数时,无论怎么变,都 不可能对原始数据进行精确描述
此时,将浮点数的小数部分去掉,只保留整数部分,强制转换。
作者:
陈佳
时间:
2013-9-3 12:58
焦允 发表于 2013-9-3 11:05
a. 自动类型转换
在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了 ...
好详细,太感谢了,以后就不怕啦!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2