黑马程序员技术交流社区

标题: 输出结果是?为什么? [打印本页]

作者: yxtyxj    时间: 2015-9-29 22:15
标题: 输出结果是?为什么?
int x = 5;
x = x++;
x = x++;
x = x++;
System.out.println("x = "+x);
作者: christian    时间: 2015-9-29 22:17
结果应该是x=8
作者: 楼夜雪    时间: 2015-9-29 22:21
同问,但是我感觉是因为堆内存用玩就消失,所以一直是5~
作者: 楼夜雪    时间: 2015-9-29 22:22
错了是 栈内存
作者: lvcj    时间: 2015-9-29 22:27
其实X=X++  拆分开来就是:
X=X;
X++;
先赋值再自增   最后结果为8
作者: 0925李超月    时间: 2015-9-29 23:17
结果是 x = 5
解析:是将(x++)表达式的值赋予了x,但是由于++符号在x的后面,所以先使用x的值作为(x++)表达式的值,           所以x = x++; //值为x = 5
x = x++;//  x = 5
x = x++;// x = 5
作者: outxf003    时间: 2015-9-30 01:06
结果为5,由于++在x的后面,所以运算时是先把x的值提取出来然后赋值给x,然后再自增,3次都是先赋值给左边,所以3次下来结果是不会发生改变的
作者: 小鹿    时间: 2015-9-30 08:44
X  = 5,  你把知识点++和--在复习一下吧!
作者: a6883767    时间: 2015-9-30 08:48
x=5, 因为x++是已经赋值完再加1,所以x还是5
作者: ln0491    时间: 2015-9-30 09:45
5.。。。。。。。。
作者: heshiwei    时间: 2015-9-30 09:55
楼夜雪 发表于 2015-9-29 22:21
同问,但是我感觉是因为堆内存用玩就消失,所以一直是5~

1.首先这个代码不是在堆内存执行的,而是在栈内存

2.x=x++ 执行完后x不会消失,x的值也发生改变,所以每执行一次x自增1


作者: heshiwei    时间: 2015-9-30 09:56
答案是8
x++执行一次,值都+1
作者: Synaric    时间: 2015-9-30 10:15
运行结果是5,但是如何解释x没有自增?
作者: 狮子王    时间: 2015-9-30 10:57
  楼上几位运行了吗?  运行结果为5, ++在后面先赋值在自增.
作者: 豆豆的小幸福    时间: 2015-9-30 12:39
运行结果是5,没错的。我的理解是将“x=x++;” 看成是一次函数的调用
public static void show(int x){

x=x++;
}
那么上面就是: int x=5;
                      show(x);
                      show(x);
                      show(x);
   System.out.println("x="+x);
那么你画栈那个框图一个一个来就知道了,首先main x=5,第一次调用show函数后现将main中的5赋给x,然后执行自加x=6,但是到这个语句结束,则x=6将随着show函数的弹栈也被弹出去。则第二次调用show的时候仍然是将main中的5赋给x,接下同第一次的步骤。第三次亦是如此。所以最后输出的其实是主函数中的x=5。      
作者: 碧血丹心    时间: 2015-9-30 22:41
结果为5.运行如下图。
原因:首先要明确各个X。
对于x=x++;
System.out.println("x="+x);
在打印的x为等号左边的x,原代码可以改为:
int x=5;
int y=x++;
int z=y++;
int h=z++;
system.out.prinltn("h"+h);
也就是原代码中
(1)int x=5;
(2)x=x++;
(3)x=x++;
此时(2)右边的x首先赋值给左边x=5,然后右边自增,而(3)中的右边x调用的是(2)左边的x=5.故(3)的左边先赋值,(3)的左边x=5,同理,以下都是。
大家只是对各个x如何调用。
希望对大家有用~

QQ图片20150930223149.png (133.75 KB, 下载次数: 107)

QQ图片20150930223149.png

作者: abidada    时间: 2015-9-30 22:58
我想 应该是5
作者: abidada    时间: 2015-9-30 23:01
本帖最后由 abidada 于 2015-9-30 23:04 编辑

你变为     x=++x;                               x=++x;
            x=++x;
     最后才x=8



作者: 605526241    时间: 2015-9-30 23:06
一直是5,因为是将x++运算的值传递给a其实是这样的    1.x++将5拿出来作为运算结果,2.x++还有自增1   x变6...3.将运算结果传递给x所以,x还是5,就算再运算无数次还是5
作者: silencea    时间: 2015-9-30 23:15
5啊,表达式的值始终是5,了解运算的每一步就知道了
作者: spruce    时间: 2015-9-30 23:24
5   x=x++   先赋值后自增,x++这个表达式仅仅是计算了一个加1,并没有将结果赋予x,所以x值不变是5
作者: 381890216    时间: 2015-9-30 23:27
应该是5。。。。?
作者: lvfx    时间: 2015-9-30 23:59
8啊            
作者: maxwell247    时间: 2015-10-1 00:05
这样的题目没有意义。这叫做滥用。
作者: 云上边牧    时间: 2015-10-1 00:39
本帖最后由 云上边牧 于 2015-10-1 01:00 编辑

x = 5,这个全部在栈内存中,没执行完一条x= x++,就弹栈了,main方法中的X值始终是5,所以输出的也是5
作者: 楼夜雪    时间: 2015-10-1 08:57
heshiwei 发表于 2015-9-30 09:55
1.首先这个代码不是在堆内存执行的,而是在栈内存

2.x=x++ 执行完后x不会消失,x的值也发生改变,所以每 ...

但是运行结果为5,如果不是栈内存消失,你怎么解释
作者: 楼夜雪    时间: 2015-10-1 08:59
碧血丹心 发表于 2015-9-30 22:41
结果为5.运行如下图。
原因:首先要明确各个X。
对于x=x++;

李福菊,这个解释应该是正确的~~
作者: heshiwei    时间: 2015-10-1 09:14
楼夜雪 发表于 2015-10-1 08:57
但是运行结果为5,如果不是栈内存消失,你怎么解释

运行结果是5,是因为:
先赋值后自增,x++这个表达式仅仅是计算了一个加1,并没有将结果赋予x,所以x值不变是5

前面有人说了。
作者: polarfox17    时间: 2015-10-1 19:26
喔,是这样的啊。。。。
作者: 915816106    时间: 2015-10-1 22:06
明明8 好吗
作者: 迷茫不堪的年纪    时间: 2015-10-1 23:38
一句话,  x++都是废话,没用  所以一直无用功。  5  你给他只是初始赋值,后续没继续赋值




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