A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余海龙 黑马帝   /  2012-1-12 20:35  /  3499 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余海龙 于 2012-2-2 13:36 编辑

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

点评

问题解决完啦,及时编辑成 已解决~ 才能有技术分  发表于 2012-2-2 13:16

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

19 个回复

倒序浏览
本帖最后由 刘基军 于 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:41
第一句:c = a + b;
a是byte,b也是byte,相加仍为:byte类型的7,再赋值给byte的c,所以正确
而第二句:c =  ...

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

不好意思,我搞错了。
前一句错误【表达式的数据类型自动提升:所有的byte型、short型和char的值将被提升到int型。】
后一句正确【对于byte数组范围(-128-127)内的int型数值,可以直接赋值给byte的】

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
魏志雷 黑马帝 2012-1-12 21:02:51
7#
楼上正解啊,哈哈!
回复 使用道具 举报
余海龙 黑马帝 2012-1-12 21:07:52
8#
刘基军 发表于 2012-1-12 20:58
不好意思,我搞错了。
前一句错误【表达式的数据类型自动提升:所有的byte型、short型和char的值将被提升 ...

恩 好像有点懂了,学习了!
回复 使用道具 举报
lanzhengyu 2012-1-12 21:13:33
9#
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
貌似不起眼,刚才在编辑器写了一遍发现很神奇。希望以后自己注意。
回复 使用道具 举报
袁野 黑马帝 2012-1-13 00:39:06
11#

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 在这个范围 所以是可以编译的 一旦超出这个范围就不可以编译的

你可以试试;

点评

同学,你必须验证下自己写的代码~我们作为新手,想回答问题~先试验~自动搞懂啦,弄准确啦在发代码~c =(byte)(a+b);才行~  发表于 2012-2-2 13:13
回复 使用道具 举报
王杰 黑马帝 2012-1-13 08:24:49
12#
byte a=2,b=5,c;
c=a+b;//因为都是byte的。所以编译成功。
c=3+4;//编译失败,是因为3和4在Java中默认是以int存储的。而你将一个int的数赋给一个short类型的变量,那肯定会出错了。
回复 使用道具 举报
苳眠 发表于 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:39
14#
刘基军 发表于 2012-1-13 09:23
这题答案不是这样的,呵呵

哦哦 原来如此 呵呵 刚才看了他们的答案 。下次一定要自己实验了在说 ,这次学习了  。。
回复 使用道具 举报
a和b相加,返回来的是int型,然后c是byte型的,所以必须要做强转动作
代码改成如下就没问题了:
c = (byte)(a+b);
回复 使用道具 举报
运算的强制类型转换,有时很容易就错了,还是要理解其本质,保证运算后的数据类型跟赋值的变量类型一致

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
毕老师的视频
毕向东_Java基础
黑马程序员_毕向东_Java基础视频教程第02天-08-类型转换
说的很清楚

评分

参与人数 1技术分 +1 收起 理由
admin + 1 对,多看视频,多练习!

查看全部评分

回复 使用道具 举报
楼上正解。。。
回复 使用道具 举报
衣服 黑马帝 2012-1-30 14:42:28
19#

楼上正解。。。
回复 使用道具 举报
我找了好长时间都不知道问题怎么关闭,今天终于找到了啊 ,{:soso_e192:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马