黑马程序员技术交流社区

标题: 类型转换问题??? [打印本页]

作者: 余海龙    时间: 2012-1-12 20:35
标题: 类型转换问题???
本帖最后由 余海龙 于 2012-2-2 13:36 编辑

byte a=2,b=5,c;
c=a+b;
c=3+4;
为什么前一句编译错误,后一句编译正确啊?

作者: 刘基军    时间: 2012-1-12 20:41
本帖最后由 刘基军 于 2012-1-12 21:19 编辑

【修正】
第一句:c = a + b;
a,b是byte,再计算之前,会先对它们进行自动类型提升为int,再进行相加计算,最后赋值给byte的c,编译错误
而第二句:c = 3 + 4;
对于byte类型范围内的数值(-128-127),可以直接将这些数值直接赋给byte类型的c,编译正确
作者: 余海龙    时间: 2012-1-12 20:49
刘基军 发表于 2012-1-12 20:41
第一句:c = a + b;
a是byte,b也是byte,相加仍为:byte类型的7,再赋值给byte的c,所以正确
而第二句:c =  ...

可是运行的结果是
c = a+b;  错误。  
c = 3+4; 正确啊。
作者: 魏志雷    时间: 2012-1-12 20:49
a,b,c都是byte类型,byte占一个字节,int类型占4个字节,从字节看是不同的,不同类型之间进行运算需要强制类型转换;相同类型之间进行运算是不需要的!
作者: 余海龙    时间: 2012-1-12 20:54
不好意思,刚才问题没说清楚。
byte a=2,b=5,c;
c=a+b;
c=3+4;
为什么c=a+b编译错误
c=3+4编译成功啊?
作者: 刘基军    时间: 2012-1-12 20:58
余海龙 发表于 2012-1-12 20:49
可是运行的结果是
c = a+b;  错误。  
c = 3+4; 正确啊。

不好意思,我搞错了。
前一句错误【表达式的数据类型自动提升:所有的byte型、short型和char的值将被提升到int型。】
后一句正确【对于byte数组范围(-128-127)内的int型数值,可以直接赋值给byte的】
作者: 魏志雷    时间: 2012-1-12 21:02
楼上正解啊,哈哈!
作者: 余海龙    时间: 2012-1-12 21:07
刘基军 发表于 2012-1-12 20:58
不好意思,我搞错了。
前一句错误【表达式的数据类型自动提升:所有的byte型、short型和char的值将被提升 ...

恩 好像有点懂了,学习了!
作者: lanzhengyu    时间: 2012-1-12 21:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 魏腾飞    时间: 2012-1-12 22:09
貌似不起眼,刚才在编辑器写了一遍发现很神奇。希望以后自己注意。
作者: 袁野    时间: 2012-1-13 00:39

byte a=2,b=5,c;
c=a+b; (1)
c=3+4;  (2)

为什么(1)会错误 ; 当a+b 进行运算的时候由byte类型转换到int 本生C是byte类型 所以肯定是错了

对(1)修改 c= (byte)a+b; 就可以了
为什么(2)可以进行编译 是因为byte 类型的范围(-128-127) 3+4=7 在这个范围 所以是可以编译的 一旦超出这个范围就不可以编译的

你可以试试;

作者: 王杰    时间: 2012-1-13 08:24
byte a=2,b=5,c;
c=a+b;//因为都是byte的。所以编译成功。
c=3+4;//编译失败,是因为3和4在Java中默认是以int存储的。而你将一个int的数赋给一个short类型的变量,那肯定会出错了。

作者: 刘基军    时间: 2012-1-13 09:23
苳眠 发表于 2012-1-13 08:24
byte a=2,b=5,c;
c=a+b;//因为都是byte的。所以编译成功。
c=3+4;//编译失败,是因为3和4在Java中默认是以i ...

这题答案不是这样的,呵呵
作者: 王杰    时间: 2012-1-13 10:53
刘基军 发表于 2012-1-13 09:23
这题答案不是这样的,呵呵

哦哦 原来如此 呵呵 刚才看了他们的答案 。下次一定要自己实验了在说 ,这次学习了  。。
作者: 刘明瑞    时间: 2012-1-13 15:57
a和b相加,返回来的是int型,然后c是byte型的,所以必须要做强转动作
代码改成如下就没问题了:
c = (byte)(a+b);
作者: 吴璞玉    时间: 2012-1-13 18:52
运算的强制类型转换,有时很容易就错了,还是要理解其本质,保证运算后的数据类型跟赋值的变量类型一致
作者: 何周舟    时间: 2012-1-14 04:38
毕老师的视频
毕向东_Java基础
黑马程序员_毕向东_Java基础视频教程第02天-08-类型转换
说的很清楚
作者: 孙玉伟    时间: 2012-1-17 16:24
楼上正解。。。
作者: 衣服    时间: 2012-1-30 14:42

楼上正解。。。
作者: 余海龙    时间: 2012-2-2 13:37
我找了好长时间都不知道问题怎么关闭,今天终于找到了啊 ,{:soso_e192:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2