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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 蓝墨清幽 于 2015-4-21 16:55 编辑

以下代码中再编译过程中都不会出现错误,可是③会出现The assignment to varible b has no effect的警告,而①和②没有警告。③和①、②有什么不同吗???求解!!!
①  byte b = 1; b = b += 1;
②  byte b = 1; b = ++b;
③  byte b = 1; b = b++;④  byte b = 1; b = b + 1;


无标题.png (14.48 KB, 下载次数: 40)

无标题.png

点评

byte b = 1;//b是byte类型的 b=++b;//先进行b自增,b+1结果是int类型的。而b是byte类型的。int类型比byte类型高级,不会自动转换。 改一下:b=(byte)++b;  发表于 2015-4-21 16:07

评分

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

查看全部评分

41 个回复

倒序浏览
经验啊... 向楼主学习

点评

嗯嗯失误。看图,前自增有警告,后自增没有。我想知道原因,你知道吗?  发表于 2015-4-21 16:22
你写的2和3是一样的,再编辑一下吧  发表于 2015-4-21 16:03
我是来求解的  发表于 2015-4-21 16:00
回复 使用道具 举报
我恨死这个编辑器了,我的格式啊,格式啊!!我去,全给我打乱了!
回复 使用道具 举报
那后自增的为么可以,是因为b+1的值没有赋给b,b值仍没有变么?
回复 使用道具 举报
itheima_llt 发表于 2015-4-21 16:08
我恨死这个编辑器了,我的格式啊,格式啊!!我去,全给我打乱了!

那后自增的为么可以,是因为b+1的值没有赋给b,b值仍没有变么?
回复 使用道具 举报
蓝墨清幽 发表于 2015-4-21 16:37
那后自增的为么可以,是因为b+1的值没有赋给b,b值仍没有变么?

{:3_54:}.....姐姐,你这样回复我是看不到的。。。。你都没回复我。
我要不点你帖子,都没看到。
----------------------------------
后自增b=b++;//这是先做赋值动作b = b;都是byte,当然没问题!
自增完了b再加1。
!注意了,这个时候,b+1也被提升为int类型的了!!
b=b++;
最后这个b还是被提升为int类型的了。
不信,你可以再加一条语句
byte c = b;还是会出现同样的提示:这个赋值语句没有意义!
回复 使用道具 举报
本帖最后由 蓝墨清幽 于 2015-4-21 16:54 编辑
itheima_llt 发表于 2015-4-21 16:42
.....姐姐,你这样回复我是看不到的。。。。你都没回复我。
我要不点你帖子,都没看到。
-------- ...

:o嗯嗯谢谢。但是像④  byte b = 1; b = b + 1; 这种强制类型转换都会报错,而③却不会报错只有警告,这是什么情况?
回复 使用道具 举报
蓝墨清幽 发表于 2015-4-21 16:51
嗯嗯谢谢。但是像④  byte b = 1; b = b + 1; 这种强制类型转换都会报错,而③却不会报错,这是什么情 ...

原因很简单!
在你写byte b =1;b = b++;的时候,
JAVA 认为是你粗心,所以它帮你做了这件事:b = (byte) b++;
所以eclipse只给出警告,但不标识为错误。
而byte b =1; b= b+;
Java就认为你完全不懂类型转换原理,当然要报错了!
------------------------
这就跟老师改作业一样!
如果老师无法判断你是真的不懂,还是粗心大意。老师就会默认判断你是粗心大意,只给出提示,要你小心!
但是如果老师能一目了然的判断你犯错误了,是不会认为你是粗心大意的,而是直接打×。
-----------------
相信,你应该有过这种体会:
考试的时候,你写个模棱两可的答案,老师给你判√过,而不是判×。

点评

嗯嗯谢啦。这下彻底明白了。  发表于 2015-4-21 17:04

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 帖子太多了,不好意思啊!

查看全部评分

回复 使用道具 举报
不客气,助人为快乐之本!
回复 使用道具 举报
itheima_llt 发表于 2015-4-21 16:42
.....姐姐,你这样回复我是看不到的。。。。你都没回复我。
我要不点你帖子,都没看到。
-------- ...

byte c=b;没有出现警告啊,话说The assignment to variable b has no effect这句话啥意思啊?什么情况下老是出现它。

捕获.PNG (3.03 KB, 下载次数: 37)

捕获.PNG
回复 使用道具 举报
蓝墨清幽 发表于 2015-4-21 18:14
byte c=b;没有出现警告啊,话说The assignment to variable b has no effect这句话啥意思啊?什么情况下 ...

都有黄色的横线了,还不是警告啊!?
那句英文前面我给你翻译过了的。。。。
“这个变量声明无效”
黄色的曲线就是警告,你仔细看看。
当你是粗心犯得错误,JVM能自己校正,就是警告。
JVM不能自己校正,就是错误,就标红线。
回复 使用道具 举报
不错,很简洁!!!!

点评

我说的是下一句:c=b;你说将c=b也会同样的警告。  发表于 2015-4-21 21:33
回复 使用道具 举报
看了以后感觉长见识了- -
回复 使用道具 举报
好熟悉的java代码,可我还要学c
回复 使用道具 举报
itheima_llt 发表于 2015-4-21 16:59
原因很简单!
在你写byte b =1;b = b++;的时候,
JAVA 认为是你粗心,所以它帮你做了这件事:b = (byte) b ...

为什么运行的结果b是1?

点评

这里是后自增,运算之后才加1。前自增是先加1,再进行运算。  发表于 2015-4-21 22:28
回复 使用道具 举报
本帖最后由 itheima_llt 于 2015-4-21 22:15 编辑
itheima_llt 发表于 2015-4-21 19:03
不错,很简洁!!!!

我看错了。
原因是:JVM帮你强转了,b在17语句后经过JVM强转后就变成byte了。
byte c = b;不会有问题的。。。
--------------
别用eclipse了,用Editplus或者Notepad++吧
回复 使用道具 举报
3一个是赋值。一个是运算
回复 使用道具 举报
itheima_llt 发表于 2015-4-21 22:11
我看错了。
原因是:JVM帮你强转了,b在17语句后经过JVM强转后就变成byte了。
byte c = b;不会有问题的。 ...

这位师哥回答得好详细!长知识了!
回复 使用道具 举报
wangyu 发表于 2015-4-21 22:05
为什么运行的结果b是1?

你这个问题问得太好了,可惜我不知道。囧!
暂时看这个图吧。我再好好想想看看

byte.jpg (80.59 KB, 下载次数: 30)

byte.jpg
回复 使用道具 举报
lai19 中级黑马 2015-4-21 22:48:32
20#
同学习了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马