黑马程序员技术交流社区

标题: 变量输出问题 [打印本页]

作者: 刘松703    时间: 2013-12-19 17:46
标题: 变量输出问题
  1. public class Demo1 {
  2. int x = 12;

  3. public static void main(String[] args) {

  4. Demo1 d = new Demo1();
  5. d.method(5);
  6. }

  7. public void method(int x) {
  8. x += x;
  9. System.out.println(x);
  10. }

  11. }
复制代码

大家来看看输出的解雇应该是多少啊?


作者: Faner    时间: 2013-12-19 18:18
输出的是10!
作者: belief丶Only    时间: 2013-12-19 18:28
输出的是10;
在堆中你new了Demo1这个对象,假设有一个地址为0x123
在栈中存在一个引用对象d,这是,堆中就将地址为0x123赋给了d; 这时Demo1 d = new Demo1();创建完成
上面int x = 12;属于全局变量了,他在静态数据区中
method(int x)方法直接存在了方法区中
对象d调用方法区中的method(int x),传的值是5,方法中变量名x;
x+=x; 这个x会先在方法区中找到x,而且你穿的值是5;

当这个变量存在的时候,那么x就不需要再去栈中需找x了;
直接运算了
作者: java--周群    时间: 2013-12-19 18:51
输出结果为  10     程序读主函数,在堆中创建一片空间,并把地址赋值给d,后来d调用method方法,把method中的5赋给x,结果是5+5=10;
作者: 城市儒侠    时间: 2013-12-19 19:06
  1. public class Test {
  2.         int x = 12;

  3.         public static void main(String[] args) {

  4.                 Test d = new Test();
  5.                 d.method(5);
  6.         }

  7.         public void method(int x) {
  8.                 x += x;
  9.                 System.out.println(x);
  10.         }

  11. }
复制代码
输出是10.
int x = 12; 这里是成员变量


public void method(int x) {
                x += x;
                System.out.println(x);
        }
这里的X是局部变量。

main方法等于创建了一个对象,调用了这个对象的方法。

在局部变量和成员变量名字相同的时候,局部变量优先级更高。所以这里的x+=x里面的x的值是5.

5+5 =10所以结果是10





作者: kun1990    时间: 2013-12-19 21:17
输出的是10
作者: 月生春    时间: 2013-12-19 22:36
当然结果是10罗。System.out.println(x);这条语句是定义在method(int x)方法里的 不可能访问到外面的的x的值;




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