黑马程序员技术交流社区

标题: 新手提问 [打印本页]

作者: 静水流华    时间: 2013-12-9 08:50
标题: 新手提问


  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. 这里面也涉及强制转化数据类型吗?还是其他原因,谁能叫我一下怎样分析



作者: 依然    时间: 2013-12-9 09:24
这里解释下整个流程:
System.out.println(i++ == i + 1);
==的左半边先执行,结果为i(即0),而后i加一
==的右半边是i+1=2,(i已经为1了,以为左边i++执行结果)
所以结果对比是(0==2)所以为 false。
这里关键是,左右两边是顺序执行。
作者: ixiangfeng    时间: 2013-12-9 09:39
依然 发表于 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:41
本帖最后由 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.
作者: 依然    时间: 2013-12-9 09:49
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.
作者: ixiangfeng    时间: 2013-12-9 09:50
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:51
明白了,已解决,谢谢大家的帮忙
作者: 依然    时间: 2013-12-9 09:52
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自加一,后进行比较。
作者: ixiangfeng    时间: 2013-12-9 09:52
依然 发表于 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
作者: ixiangfeng    时间: 2013-12-9 09:54
依然 发表于 2013-12-9 09:49
哥们,好像是2吧,你看下这个代码
结果y为2.

你可以在最后写多一个输出语句
int i = 2;
System.out.println(i+1 == i++);
System.out.println(i);
你执行这三句代码就会发现其实i为3
作者: 依然    时间: 2013-12-9 09:59
ixiangfeng 发表于 2013-12-9 09:54
你可以在最后写多一个输出语句
int i = 2;
System.out.println(i+1 == i++);

你的结论是对的,但对于本题来说是左边卫i++ 右边为i+1,最后的结果,i当然为1,但是右边应该是i+1=2吧?
作者: ixiangfeng    时间: 2013-12-9 10:12
依然 发表于 2013-12-9 09:59
你的结论是对的,但对于本题来说是左边卫i++ 右边为i+1,最后的结果,i当然为1,但是右边应该是i+1=2吧? ...

嗯嗯 刚才去试了下 的确是这样的
作者: FFF    时间: 2013-12-9 10:17
楼主,楼主,他们俩打架,没伤着你吧?他们自己玩,倒把你地给丢一边了~{:soso_e120:}




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