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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小草君 中级黑马   /  2014-5-28 22:14  /  2230 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class IfTest{
        public static void main(String[] args){
                int x = 1,y = 1;
                if(x++==2 && ++y==2)
                {
                        x =7;
                }
                        System.out.println("x="+x+",y="+y);//打印的是x=2,y=1
                int z = 1;
                if(++z== 2){
                        System.out.println(z);//编译通过,打印的是z=2;
                }
                int s=1;
                if(s++==2)
                {       
                        System.out.println(s);//编译不通过
                }
        }
}
//那么这个s++==2的算法是怎么算的,和++z==2有什么区别?

23 个回复

正序浏览
13556793092 发表于 2014-5-28 23:26
主要切入要点:1.x++是先运算在自增;++x是先自增,在参与运算;
                        2.&&当两边条件都满足为true,当&&前语 ...

这个解释最清楚 真厉害
回复 使用道具 举报
额 就是一个先引用后加1  和先加1后引用,  2楼说的很清楚了
回复 使用道具 举报
love~陌 发表于 2014-5-31 11:41
官方文件说当++遇到小括号,小括号运算优先级高于++,所以遇到类似于s=(i++),按照官网说法,应该是i++运算 ...

貌似不算BUG,s=(i++) 是整体,先要把语句执行完了 i才++;
回复 使用道具 举报
i++是使用了i的值之后再将i的值加1 ++i是在使用i的值之前就将i的值加1  这样可以理解吗?
回复 使用道具 举报
这个会了已经。。。
回复 使用道具 举报
哈哈,简单的小问题。
回复 使用道具 举报
大伙都会打的很专业的!
回复 使用道具 举报
二楼说说的JDK的BUG是什么,急切想知道:handshake
回复 使用道具 举报
官方文件说当++遇到小括号,小括号运算优先级高于++,所以遇到类似于s=(i++),按照官网说法,应该是i++运算完再赋值给s,你实际运行,小括号形同虚设,有跟没有结果都是一样的。少侠,老夫只能说到这里
回复 使用道具 举报
既然技术分,那我就继续说吧。
回复 使用道具 举报
Aron 中级黑马 2014-5-29 00:02:43
14#
大家都讲的好清楚 我就不发话了 路过。。
回复 使用道具 举报
确实是非常的基础,楼主说的不是 编译不成功,而是没有运行结果
回复 使用道具 举报
s++==2的运算顺序是:先判断s==2是否正确,然后s自增1,

++z==2的运算顺序是:z先自增1,然后判断结果自增后的z==2是否正确

总而言之 就是如果++在前就先自增在判断,如果++在后先判断在自增
回复 使用道具 举报
先比较s++和++s的区别:s++先运算,后自加1.++s先自加1再做运算。理解他们之间的区别,就可很容易的区分
s++==2的算法和++z==2有区别(s++==2先判断s==2在自加1,而++z则是z先自加1,再判断是否等于2)
回复 使用道具 举报
主要切入要点:1.x++是先运算在自增;++x是先自增,在参与运算;
                        2.&&当两边条件都满足为true,当&&前语句为false,不再执行&&后面的语句
解析代码如下:

class IfTest{
        public static void main(String[] args){
                int x = 1,y = 1;
                /*1.判断x++==2 && ++y==2
                   2.先比较x==2,返回false,在自增x=2
                   3.由于&&前面条件失败,故不需要判断++y==2  即依旧y=1;
                   4.if语句条件不满足,继续执行程序,打印x=2,y=1;
                */
                if(x++==2 && ++y==2)
                {
                        x =7;
                }
                        System.out.println("x="+x+",y="+y)
                int z = 1;
                //原理同上
                if(++z== 2){
                        System.out.println(z);
                }
                int s=1;
                //原理同上
                if(s++==2)
                {        
                        System.out.println(s);
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 很给力!

查看全部评分

回复 使用道具 举报
wyy666 中级黑马 2014-5-28 23:24:08
9#
很基础,需要自己先体会下,
回复 使用道具 举报
  1. class IfTest{
  2.         public static void main(String[] args){
  3.                 int x = 1,y = 1;
复制代码
回复 使用道具 举报
太基础了,楼上的都回答好了。。

顺便提一个点:没有编译不通过,是没有执行代码里面的打印语句。
回复 使用道具 举报 1 0
那么这个s++==2的算法是怎么算的,和++z==2有什么区别

对于++z和z++的问题,你可以简单的这么认为(这是诀窍!):
谁在前谁先运算!

不比听别人怎么给你啰嗦的解答,记住这个诀窍即可。

s++==2的运算顺序是:
先判断s==2,然后s自增1,

++z==2的运算顺序是:
z先自增1,然后判断结果自增后的z==2

少侠,记住诀窍,万事不愁!

若是版主给我加了技术分,我再告诉你JDK里面的一个小BUG

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
12下一页
您需要登录后才可以回帖 登录 | 加入黑马