黑马程序员技术交流社区
标题:
麻烦帮忙解释一下这个问题
[打印本页]
作者:
徐传任
时间:
2012-9-20 22:07
标题:
麻烦帮忙解释一下这个问题
class Test7
{
public static void main(String[] args)
{
int b = 5;
int a = 6;
b = a++;
System.out.println(a+".."+b);
}
}
//这个结果是7..6,我知道a++,这样是先赋值后运算
class Test8
{
public static void main(String[] args)
{
int a = 6;
a = a++;
int b = a;
System.out.println(b+"..."+a);
}
}
//为啥这个结果就都是6..6,b为啥也是6,a=a++;a不是++了吗,b不应该是7吗?
复制代码
作者:
黑马杨晨
时间:
2012-9-20 22:16
是这样的
int a = 6;
a = a++;
//这里的运算顺序是:先取了右边a的值存到一个临时变量中,然后对右边的j进行+1;然后将临时变量中的值赋给a。所以a的值是6。
int b = a;
System.out.println(b+"..."+a);
作者:
严海荣
时间:
2012-9-20 22:20
a++值还是6,过了这行,a就可以变成7了,但是它发现自己还是6,原来它喵的a++的值赋给了a 它自己,只能委屈的还是6了。
b也跟着倒霉,被a拖下水赋了6.
作者:
王雷
时间:
2012-9-20 22:22
a = a++; 这句语句的理解有点模糊你,这是先将a的值赋给a,然后在进行++计算,所以这里a的值是++计算之前的取值 a=6
作者:
王小闲7
时间:
2012-9-20 22:37
这个问题很简单,你也说a先赋值后自加,所以你前面定义的a也就是a=a++;左边的a的值此时是6,所以打印出来a的值还是6
作者:
李健_8
时间:
2012-9-20 22:57
先赋值后运算嘛 a=a++;此时a=6;后面b=a;所以b也等于6啦
作者:
明光照
时间:
2012-9-20 23:43
a++是赋值后+1;
++a是+1后再赋值。
{
int a = 6;
a = a++;//这只是一个赋值,赋值后的a的值为6
int b = a;
System.out.println(b+"..."+a);
a++;
System.out.println(a++);//这里的打印结果为7
System.out.println(++a);//打印的为1个++a和和2个a++
}
}
//第一个println的结果:6...6
//第二个println的结果:7
//第三个println的结果:9
}
//6...6
//7
a++了之后再a++还是7。
作者:
杨华东
时间:
2012-9-21 11:11
有几点我要说的 希望你理解。
1,赋值方式:右边的当前值赋值给左边。
2,a++ 是先把a的当前值 赋值给同类型变量(包括自己) 然后 在自己自增一次。
3,++a是先自增一次 然后把自增后的结果作为当前值赋值给同类型变量(也包括自己啦)。
只能说到这样啦。
作者:
舒远
时间:
2012-9-21 11:57
本帖最后由 舒远 于 2012-9-21 11:59 编辑
程序员面试宝典中一个很经典的例子:
public static void main(String[] args){
int j = 0;
for(int i = 0; i < 100; i++)
j = j++;
System.out.println(j);
}
对java来说,j的输出值是0。
因为java的中间缓存变量机制使j=j++语句可以分解成如下操作:
temp = j;
j = j + 1;
j = temp;
复制代码
因为java采用了中间缓存变量机制导致的。
作者:
蔡汉康
时间:
2012-9-21 12:18
10楼的回答很不错,留下脚印,方便日后复习
作者:
舒远
时间:
2012-9-21 12:26
andychua 发表于 2012-9-21 12:18
10楼的回答很不错,留下脚印,方便日后复习
谢谢捧场,共同学习!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2