当前位置:编程学习 > JAVA >>

一道java面试题,为什么会这样

int x=100;
int y=200;
System.out.println(x+(x=y));
System.out.println(x);
求输出结果 --------------------编程问答-------------------- 关键问题其实就是: 
  (x=y)
是一个赋值语句,赋值后的结果(也即200),是这整个赋值语句的值。 --------------------编程问答-------------------- 第一个:100+200=300
第二个:200 --------------------编程问答--------------------
引用 2 楼  的回复:
第一个:100+200=300
第二个:200


小弟想不明白   为什么(x=y)附完值之后x=200;那x+(x=y)应该是200+200啊  为什么是100+200??? --------------------编程问答--------------------
伤不起呀伤不起 --------------------编程问答-------------------- int x=100;
int y=200;
System.out.println(x+(x=y));// 第一个x是100 还没有被赋值 第二个x被赋值了  
System.out.println(x);// 这个X 是已经被赋过值的了
300 200

--------------------编程问答--------------------
引用 3 楼  的回复:
引用 2 楼 的回复:

第一个:100+200=300
第二个:200


小弟想不明白 为什么(x=y)附完值之后x=200;那x+(x=y)应该是200+200啊 为什么是100+200???

在 System.out.println(x+(x=y));这一句中首先程序执行的是第一个x,此时的x的值是100,程序继续向后运行,当运行到(x=y)时,对x进行赋值,那么x的值为200,但是前x的值已经是100存在内存中不会改变了,所以是100+200=300,不知道我说说的对不对,向各位大虾讨教
--------------------编程问答-------------------- 第1个是100+200=300
第2个是200
第一个先执行第一个x,此时x是100,然后x=y把y的值200赋给了x,x就成了200. --------------------编程问答-------------------- 看下Java 变量申明的真正意义吧! 变量名 只是 内存地址的一个名称而已 --------------------编程问答--------------------
引用 6 楼  的回复:
引用 3 楼  的回复:
引用 2 楼 的回复:

第一个:100+200=300
第二个:200


小弟想不明白 为什么(x=y)附完值之后x=200;那x+(x=y)应该是200+200啊 为什么是100+200???

在 System.out.println(x+(x=y));这一句中首先程序执行的是第一个x,此时的x的值是100,程序继续向后运行,当运行到(x=y)……



说的好像对。。。 --------------------编程问答-------------------- 你应该研究一下,算数运算在java中的执行流程 --------------------编程问答-------------------- 从内存来分析就会很清晰 --------------------编程问答-------------------- javap看下压栈过程就一目了然了 --------------------编程问答--------------------
第一个:在执行(x=y)前x=100,而(x=y)返回300,所以结果为300
第二个:x已经是200,所以结果为200
--------------------编程问答-------------------- +1
引用 2 楼  的回复:
第一个:100+200=300
第二个:200
--------------------编程问答-------------------- 我测试过了100+200
你可以写成0+(x=y)这样可以测出+右边的值是两百
实际上,“+”在运算的时候是先放入临时变量中的,先把左x的100放入左临时变量中。然后在运算右边为200,放入右临时变量中。然后拿左右临时变量中的值去算的。100+200 --------------------编程问答-------------------- 300
200 --------------------编程问答-------------------- int x=100;
int y=200;
System.out.println(x+(x=y)); //这句的执行流程是:自左向右执行,即先是100+(x=y),其次100+(x=200),最后 100+200;输出300;x值变为200
System.out.println(x); //输出200 --------------------编程问答-------------------- int x=100;
int y=200;
System.out.println(x+(x=y)); //这句的执行流程是:自左向右执行,即先是100+(x=y),其次100+(x=200),最后 100+200;输出300;x值变为200
System.out.println(x); //输出200 --------------------编程问答-------------------- 顶12楼,说的是源 --------------------编程问答-------------------- 300
200
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,