黑马程序员技术交流社区
标题:
关于强制类型转换的问题,大家帮忙解决一下
[打印本页]
作者:
目标
时间:
2013-11-6 19:27
标题:
关于强制类型转换的问题,大家帮忙解决一下
对于程序public class test{
public static void main(String[] args){ byte b=3;
b=(byte)(b+3);
//把b+3的值转换为byte类型
System.out.println(b);
}
}
程序这样可以运行,但是我想把 b=(byte)(b+3)修改成 b=b+(byte)3;
修改好程序编译时报错了,都是byte类型做运算 为什么不行呢?大家帮我解答一下谢谢
作者:
The_Wizard
时间:
2013-11-6 19:48
这个真不知道,你这 帖我测试过,b+(byte)3自动转换成了int。这个以后注意点就行了吧。能知道原因那当然更好
作者:
卑微の小幸福
时间:
2013-11-6 19:54
哥。混合运算肯定提升为int啊,b你也没有声明是什么类型啊?
作者:
麦者
时间:
2013-11-6 19:55
本帖最后由 麦者 于 2013-11-6 20:02 编辑
这涉及到了数据的自动装箱和拆箱功能:
基本类型:int,double,float,long,boolean,char,btye,short
基本类型包装类:Integer,Double,Float,Long,Boolean,Char,Byte,Short你这是byte基本数据类型,他是没有包装的,也就是说他不会自动拆箱,你强制转换一次,他就转换一次,不会
成为所谓的“箱”,你如果改成Byte就可以了。但是你上面的3是int型的,你强转是不对的啊,可以是Byte b=3;但是不能 把3(int)转成byte
作者:
卑微の小幸福
时间:
2013-11-6 20:04
lass Teat0 {
public static void main(String[] args) {
byte b =3;
b = (byte)(b + 3);
System.out.println(b);
}
}
刚刚说错了。弄了好久还是不行,放哪都不行,就只能这样放了!
作者:
目标
时间:
2013-11-6 20:08
卑微の小幸福 发表于 2013-11-6 20:04
lass Teat0 {
public static void main(String[] args) {
byte b =3;
谢谢 等高手帮我们解答一下
作者:
魏-玉-彪
时间:
2013-11-6 21:44
<p>对于程序public class test{
public static void main(String[] args){ </p><p> byte b=3;
b=(byte)(b+3);// 把b+3的值转换为byte类型// 此处将结果强制转换成了byte</p><p> </p><p> </p><p> b=b+(byte)3 // 此处为自动类型提升, 运算时自动提升为int型, 接收变量b仍为 byte 型 所以出错
System.out.println(b);
}
}</p>
复制代码
对基本数据类型执地算术或按位运算,大家会发现
,只要类型比int 小
,即(char,
byte 或short),那么在运算之前,这些
值会自动转换成int
.------《java编程思想》
作者:
够了没有
时间:
2013-11-6 22:01
因为在强转3的时候,计算机会把b默认为也是int类型的了,所以就编译失败了 。所以如果要强转的话就要把=右边的整体强转为byte类型。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2