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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 静水流华 中级黑马   /  2013-12-9 08:50  /  1901 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



  1. <p>class demo {</p>
  2. <p>         public static void
  3. main(string[] args){</p><p>               int i =0 ;</p>
  4. <p>               
  5. System.out.println(i++ == i + 1);</p>
  6. <p>        }</p>
  7. <p>}</p>
复制代码

为什么结果为false. 这里面也涉及强制转化数据类型吗?还是其他原因,谁能叫我一下怎样分析


评分

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

查看全部评分

12 个回复

倒序浏览
这里解释下整个流程:
System.out.println(i++ == i + 1);
==的左半边先执行,结果为i(即0),而后i加一
==的右半边是i+1=2,(i已经为1了,以为左边i++执行结果)
所以结果对比是(0==2)所以为 false。
这里关键是,左右两边是顺序执行。

评分

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

查看全部评分

回复 使用道具 举报 1 0
依然 发表于 2013-12-9 09:24
这里解释下整个流程:
System.out.println(i++ == i + 1);
==的左半边先执行,结果为i(即0),而后i加一

i++ == i + 1;这代码执行后i 的值不会等于2的应该还是1
回复 使用道具 举报
本帖最后由 ZHMing 于 2013-12-9 09:43 编辑

System.out.println(i++ == i + 1);

本句代码中 先对i++进行赋值 此时i值为0,然后将 0与 1+1进行判断。
返回结果当然为false。
你可以试着把这句话分开写进行分析。
  1. public class Demo {
  2.         public static void main(String[] args){
  3.                 int i=0;
  4.                 int y=i++;
  5.                 int x=i+1;
  6.                 System.out.println(x+"。。。。"+y);
  7.         }

  8. }
复制代码

从这段代码就可以看到。在i++赋值过后y=0,i+1后x=2.

评分

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

查看全部评分

回复 使用道具 举报
ixiangfeng 发表于 2013-12-9 09:39
i++ == i + 1;这代码执行后i 的值不会等于2的应该还是1

哥们,好像是2吧,你看下这个代码
  1. System.out.println(i++ == (y=i + 1));
  2.                         System.out.println(y);
复制代码

结果y为2.
回复 使用道具 举报
ZHMing 发表于 2013-12-9 09:41
System.out.println(i++ == i + 1);

本句代码中 先对i++进行赋值 此时i值为0,然后将 0与 1+1进行判断。

y = i++;与 i = i++;并不是一回事 假设原来int i = 2; 执行y = i + +;后 y ==2, i ==3   而执行i = i ++;后 i==2
回复 使用道具 举报
明白了,已解决,谢谢大家的帮忙
回复 使用道具 举报
依然 中级黑马 2013-12-9 09:52:11
8#
ZHMing 发表于 2013-12-9 09:41
System.out.println(i++ == i + 1);

本句代码中 先对i++进行赋值 此时i值为0,然后将 0与 1+1进行判断。

不对吧,i++,是先使用i然后再把i自加1.
所以这里是i为0的时候先那里比较,后加一给后面的代码使用。
++i才是你说的这个结果,先给i自加一,后进行比较。
回复 使用道具 举报 1 0
依然 发表于 2013-12-9 09:49
哥们,好像是2吧,你看下这个代码
结果y为2.

你可以自己去输出一下的、、、
y = i++;与 i = i++;并不是一回事 假设原来int i = 2; 执行y = i + +;后 y ==2, i ==3   而执行i = i ++;后 i==2
回复 使用道具 举报
依然 发表于 2013-12-9 09:49
哥们,好像是2吧,你看下这个代码
结果y为2.

你可以在最后写多一个输出语句
int i = 2;
System.out.println(i+1 == i++);
System.out.println(i);
你执行这三句代码就会发现其实i为3
回复 使用道具 举报
ixiangfeng 发表于 2013-12-9 09:54
你可以在最后写多一个输出语句
int i = 2;
System.out.println(i+1 == i++);

你的结论是对的,但对于本题来说是左边卫i++ 右边为i+1,最后的结果,i当然为1,但是右边应该是i+1=2吧?
回复 使用道具 举报
依然 发表于 2013-12-9 09:59
你的结论是对的,但对于本题来说是左边卫i++ 右边为i+1,最后的结果,i当然为1,但是右边应该是i+1=2吧? ...

嗯嗯 刚才去试了下 的确是这样的
回复 使用道具 举报
FFF 金牌黑马 2013-12-9 10:17:45
13#
楼主,楼主,他们俩打架,没伤着你吧?他们自己玩,倒把你地给丢一边了~{:soso_e120:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马