黑马程序员技术交流社区

标题: 我也想问一下这个==问题 [打印本页]

作者: Suly    时间: 2012-3-29 14:13
标题: 我也想问一下这个==问题
本帖最后由 Suly 于 2012-3-29 14:14 编辑

class Demo
{
      public static void main(String[] args)
      {
           int x = 1;
           int y = 2;
           System.out.println(x++ == y); //此结果为false x=2 y=2 为什么为false?
           System.out.println(x);
           System.out.println(y);
           System.out.println(x++ == y); //此结果为true x=3 y=2 为什么为true?          
                   System.out.println(x);
           System.out.println(y);
      }
}
/*其结果:
false
2
2
true
3
2
*/

作者: 黄或俊    时间: 2012-3-29 14:48
X++ 是先使用再做加1的操作,X的初始值为1,所以使用的时候是1,当第二次输出X时,X值就变为2
++X 是先做加1操作再使用
System.out.println(++x == y);   为:true

作者: 刘士    时间: 2012-3-29 15:52
class Demo
{
      public static void main(String[] args)
      {
           int x = 1;
           int y = 2;
           System.out.println(x++ == y); //此结果为false x=2 y=2 为什么为false?/*这个 x++,x的值变成了2了 */
           System.out.println(x);
           System.out.println(y);
           System.out.println(x++ == y); //此结果为true x=3 y=2 为什么为true?          /*i++,赋完再加,也就是说 先判断相等再相加,运算顺序是先判断完之后x++*/
                   System.out.println(x);
           System.out.println(y);
      }
}
作者: 何万县    时间: 2012-3-29 16:22
此问题要注意X++跟++X的区别,X ++是先做运算后,再加1
即x++ == y可分解为:x==y,   x=x+1
作者: 欧德林    时间: 2012-3-29 16:24
程序默认的是:先判断== 再做了++ 运算
就是(x++ == y) 先判断X与Y是否相等,然后再X自增

运算的优先关系 不是先算术 运算再逻辑运算啊?请楼下的大神 解释。。
作者: 杨华威    时间: 2012-3-29 16:38
你没有理解运算符++
int x = 1;
           int y = 2;
           System.out.println(x++ == y);     //x++,是先进行计算,然后再加1,比较的时候,x还是1;自然不想等了,输出之后x才加1;
       System.out.println(x);     //此时x=2;
           System.out.println(y);
           System.out.println(x++ == y); //此时运算时,x=2;结果自然是true;输出之后x=3;

记住一点,x++,是当前运算结束后再加1,++x,是先加1后再进行运算。
作者: 杨华威    时间: 2012-3-29 16:41
欧德林 发表于 2012-3-29 16:24
程序默认的是:先判断== 再做了++ 运算
就是(x++ == y) 先判断X与Y是否相等,然后再X自增

就是(x++ == y) 先判断X与Y是否相等,然后再X自增;
这句理解是正确的。
作者: 翟友伟    时间: 2012-3-29 16:46
x++            先用 后++
++x            先++再用
基础的不能再基础了 朋友

作者: 王运科    时间: 2012-3-29 18:15
class Demo
{
      public static void main(String[] args)
      {
           int x = 1;
           int y = 2;
           System.out.println(x++ == y); // 先执行,也就是判断x==y? 此时x=1,y=2;执行完后x=2。所以为false.
        System.out.println(x);
           System.out.println(y);
           System.out.println(x++ == y); //先执行,此时x=2,y=2;执行完后x=3.所以为true.         
                   System.out.println(x);
           System.out.println(y);
      }
}

作者: 刘_浩    时间: 2012-3-29 18:37
兄弟,你理解不对。对于x=1;(x++==y);这里的理解是x==y即为1==2;所以为false;      然后才是x+1.即为2.
所以System.out.println(x);x=2;     System.out.println(y);y==2;        (x++ == y),这里是x==y,即为2==2,即  为true,;         System.out.println(x);然后才是x+1,即为x=3;         System.out.println(y);y=2;
作者: 胡川    时间: 2012-3-29 18:39
class Demo
{
      public static void main(String[] args)
      {
           int x = 1;
           int y = 2;
           System.out.println(x++ == y); // 在此你要记得"++""--""==".   "++"or"--"为前缀,先自增或者自减在赋值  在后面就像犯了 ,在这个程序“++”在后面,所以是                       1.y=2所以逻辑运算符“==” 判定为 false.
        System.out.println(x);
           System.out.println(y);
           System.out.println(x++ == y); //在此同样,此时x=2,y=2;执行完后x=3.所以为true.         
                   System.out.println(x);
           System.out.println(y);
      }
}
作者: 胡川    时间: 2012-3-29 18:40
class Demo
{
      public static void main(String[] args)
      {
           int x = 1;
           int y = 2;
           System.out.println(x++ == y); // 在此你要记得"++""--""==".   "++"or"--"为前缀,先自增或者自减在赋值  在后面就相反了 ,在这个程序“++”在后面,所以是                       1.y=2所以逻辑运算符“==” 判定为 false.
        System.out.println(x);
           System.out.println(y);
           System.out.println(x++ == y); //在此同样,此时x=2,y=2;执行完后x=3.所以为true.         
                   System.out.println(x);
           System.out.println(y);
      }
}




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