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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何伟超 金牌黑马   /  2014-2-20 21:37  /  2502 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何伟超 于 2014-2-20 22:52 编辑

class Demo {
public static void main(String[] args) {
        
        int x = 4;
        int y = 5;
        System.out.println(y++);        //1
        System.out.println(y--);//2
        System.out.println(++x);
        }
}


5
6

5



y++不是应该加一吗?
为什么x就可以++呢?


这道题问题主要是以下3个优先级的比较。
a ,System.out.println();
b ,y++;
c ,++y;


答案就是c>a>b

细节呀!!

评分

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

查看全部评分

16 个回复

倒序浏览
前置++、后置++的顺序好像跟编译器有关系。
不过对于简单的这种一次++,一般是这么执行的:
y++是语句执行完毕,才会y = y + 1;
++y是先使得y = y + 1,明白么。
所以 System.out.println(y++); 输出是5,这句话结束后y = 6。
下面两句的输出结果,同理就不解释了。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
李金中 发表于 2014-2-20 21:53
前置++、后置++的顺序好像跟编译器有关系。
不过对于简单的这种一次++,一般是这么执行的:
y++是语句执行完 ...

明白了。:handshake
回复 使用道具 举报

额,你居然是版主。。哈哈 ,下次回答你问题,是不是要多给分。。。。。。:lol
回复 使用道具 举报
李金中 发表于 2014-2-20 21:58
额,你居然是版主。。哈哈 ,下次回答你问题,是不是要多给分。。。。。。 ...

可以考虑哟,嘿嘿,
回复 使用道具 举报
class Demo {
public static void main(String[] args) {
        
        int x = 4;
        int y = 5;
        System.out.println(y++);   //++在后面,那么首先执行打印动作,打印5,然后y自增一次 此时y=6     
        System.out.println(y--);//同上,先执行打印6,然后y自减一次,上面y=6,减1   此时y=5
        System.out.println(++x);//而这一步是先执行x自增为5,然后再执行打印5
        }
}
楼主切记程序运行的顺序即可,所以结果为5 6 5

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
对于y++即后自增参与运算的时候是先将自身复制一份,将复制出来的部分参与前面的运算,然后再进行自增,而++y相反,先自增,然后再把自增的结果拿去参与运算,包括在输出语句中也是一样,所以第一句输出语句中 System.out.println(y++); y的值还没有来得及自增就打印出去了,故为5,而第二轮他已经是6了,所以也来不及自减就打印出去了。最后一句的++x则先自增然后参与语句打印故也为6.

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
何伟超 发表于 2014-2-20 21:59
可以考虑哟,嘿嘿,

难得版主发帖,一定要给版主足面子,嘿嘿,希望以后共同学习,共同进步哈
回复 使用道具 举报
++如果在左  b=++a  则先执行a=a+1,再执行b=a;
++如果在右 b=a++,则先执行b=a,再执行a=a+1;
回复 使用道具 举报
徐老爹 发表于 2014-2-20 22:06
难得版主发帖,一定要给版主足面子,嘿嘿,希望以后共同学习,共同进步哈 ...

学了半年多,猛然回头,突然发现,有太多的细节被忽略。还得仔细的学习学习呀!
回复 使用道具 举报
迦罗叶 发表于 2014-2-20 22:06
++如果在左  b=++a  则先执行a=a+1,再执行b=a;
++如果在右 b=a++,则先执行b=a,再执行a=a+1; ...

其实这个帖子的主要问题是先打印还是先计算。打印后是否还会计算。
int = 4;
int y = 5;
System.out.println(y++);//打印出来是5,然而此时打印后y就是6了。
回复 使用道具 举报
何伟超 发表于 2014-2-20 22:46
其实这个帖子的主要问题是先打印还是先计算。打印后是否还会计算。
int = 4;
int y = 5;

楼主看我上面还有回复,我也是想说明程序执行的先后顺序,并非是结果是多少,不管是最后赋值,还是打印都有一段运行顺序,只要楼主明白了就好了
回复 使用道具 举报
何伟超 发表于 2014-2-20 22:43
学了半年多,猛然回头,突然发现,有太多的细节被忽略。还得仔细的学习学习呀! ...

是啊,毕竟咱都是看视频来进行学习的,很多知识点可能就在老毕的谈吐之间就溜过去了,所以每看一次收获就多一份,基础打牢了,才是王道啊
回复 使用道具 举报
迦罗叶 发表于 2014-2-20 23:03
楼主看我上面还有回复,我也是想说明程序执行的先后顺序,并非是结果是多少,不管是最后赋值,还是打印都 ...

谢谢指点呀。嘿嘿
回复 使用道具 举报
哇,是敬爱的版主的帖子哦,这个必须回呵呵。其实呢,很简单啦,就是涉及到先加后加先减后减的问题。例如
a=x++;就相当于这两句a=x;x=x+1;意思是说,x先把本身的值赋给a,然后自身再加1。a=++x;相当于这两句x=x+1;a=x;即是x先自增一次,然后再把值赋给a。x--;是一样的道理。所以用到本例中:
语句System.out.println(y++);相当于这两句话:System.out.println(y);y=y+1;即是先打印y本身的值,然后再自增一次。语句System.out.println(++x);相当于x=x+1;System.out.println(x);。所以代码:
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 4;
  6.                 int y = 5;
  7.                 System.out.println(y++);      
  8.                 System.out.println(y--);
  9.                 System.out.println(++x);
  10.         }
  11. }
复制代码

相当于代码:
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 4;
  6.                 int y = 5;
  7.                 System.out.println(y);   
  8.                 y=y+1;   
  9.                 System.out.println(y);
  10.                 y=y-1;
  11.                 x=x+1;
  12.                 System.out.println(x);
  13.         }
  14. }
复制代码

所以输出结果是:5 6 5
↖(^ω^)↗

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
疲劳的小马 发表于 2014-2-20 23:31
哇,是敬爱的版主的帖子哦,这个必须回呵呵。其实呢,很简单啦,就是涉及到先加后加先减后减的问题。例如
a ...

明白了,就近原则。
回复 使用道具 举报
何伟超 发表于 2014-2-20 23:34
明白了,就近原则。

恩,对的……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马