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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不抛弃不放弃 中级黑马   /  2013-11-10 00:16  /  2661 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我对一段程序的结果很不理解,代码如下:

int a,c=1;
c=c++;
a=c;
System.out.println("a="+a+"c="+c);
结果为 a=1;c=1;
我的分析是这样的,各位看下是哪里分析错了;
先c=c++;由于++在后,先执行c=c;结果为c=1;然后c++;c结果为2,后边a=c,就是看上面的结果了。
我这样分析是哪里错了? 我找了半天就没弄明白,望各位讲解详细点。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

11 个回复

倒序浏览
运行符优先级的问题,等号(=)永远在最后,++的优先级其实很高
c=c++只是说 c++的值是c也就是1,然后c自增(这个时候c=2),然后c = 1又变回1了
回复 使用道具 举报
FFF 金牌黑马 2013-11-10 00:41:56
藤椅
本帖最后由 FFF 于 2013-11-10 12:47 编辑

c++,加加在后面,先赋值,再自增。永远等于1;c=1,c++,c=c,c=1;自增被覆盖。自增后又被赋值为c=1;自增无效。
  1.         public static void main(String[] args){
  2.                 int a,c=1;
  3.                 for(int x=0;x<10;x++){
  4.                 c=c++;
  5.                 //System.out.println("c="+a);
  6.                 a=c;
  7.                 System.out.println("a="+a+"c="+c);
  8.                 }
  9.         }
复制代码
从以上例子中,可以看出。无论自增多少次,你的c++都是无效的。
其实,你要自增,写个c++就可以了!为什么要写c=c++;?
回复 使用道具 举报
java中有一个中间缓存变量机制,c=c++;这句代码创建了1个临时的整型变量对象,存储自增运算的结果。
这句代码可以分解成如下操作:
注:temp代表java创建的那个临时的整型变量对象。
temp=c;
c=c+1;
c=temp;
所以,c=c+1;这句代码的结果被c=temp;这句代码覆盖了。
所以,结果仍是1。
平常情况下,如果想要让某一个变量自增,可以直接c++;或者++c;即可。
回复 使用道具 举报 1 0
  1. public static void main(String[] args)
  2.         {
  3.                 int a=1,c=1;
  4.                 for(int x=0;x<10;x++){
  5.                 c=c++;
  6.                 a=c;
  7.                             }
  8.                 System.out.println("a="+a+"c="+c);
  9.         }
复制代码
修正下楼上大哥的代码,赋值和少了括号。
回复 使用道具 举报
hel 中级黑马 2013-11-10 02:28:27
地板
同求解
回复 使用道具 举报
帖子已分类,若仍有疑惑,可重新提问~
回复 使用道具 举报
Shimano 中级黑马 2013-11-10 11:00:14
8#
int a,c=1;
c = c++;                        //关键:"="前边的c=1,后边的“c++”中c=2,但都是暗涵的值,这是我的理解
a = c;
System.out.println("a="+a+"c="+c);
结果为 a=1;c=1;      为什么不是这种结果??

理解
        首先:说明你虽然知道运算符的优先级,但是没有弄明白,
        其次:搞编程的最忌讳就是想当然,要按照概念和标准一步一步来,记好是一步一步!

        即:c=c++;这个运算有如下步骤:
        第一步:先进行赋值,即:c = c;
        (此步骤没有实质含义,你若是看到b = c++;可能理解起来更好,c=c++;迷惑了你而已)

        第二步:变量c自身进行了一次+1运算,可以理解为如下几个步骤:
        c = c + 1;
        所以,把c的值赋给a后,运行结果是:a=1; c=1;
回复 使用道具 举报
零下五度的水 发表于 2013-11-10 00:32
运行符优先级的问题,等号(=)永远在最后,++的优先级其实很高
c=c++只是说 c++的值是c也就是1,然后c自增 ...

恩 你们说的 让我越来越理解自增自减怎么回事了
回复 使用道具 举报
中关村阿旺 发表于 2013-11-10 01:03
java中有一个中间缓存变量机制,c=c++;这句代码创建了1个临时的整型变量对象,存储自增运算的结果。
这句 ...

你回答的就是我最想要的   谢谢  也谢谢楼下和楼上的
回复 使用道具 举报
关于c=c++和c=c+1的疑问,运算的出不同的结果,前者都为1,后者都为2
我分析了一下,是不是前者是先赋值后自增,而后者是先加1后赋值啊?
回复 使用道具 举报
关于c=c++; 要考虑到运行符优先级的问题。
第一步:先运算c++
第二步:赋值c=1
然后c才为2。
所以,运行结果是:a=1; c=1;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马