黑马程序员技术交流社区

标题: 来分析下这个输出是什么? [打印本页]

作者: 侯凯斌    时间: 2012-11-15 11:33
标题: 来分析下这个输出是什么?
public class Example{
    int x = 12;
    public void method(int x){
        x += x;
        System.out.println(x);
    }
    public static void main(String[] args){
        Example t = new Example();
        t.method(5);
    }
}
作者: 张学永    时间: 2012-11-15 11:44
我觉得应该是10,
    public void method(int x){
        x += x;
        System.out.println(x);
    }
这段语句中,x一直都是局部变量,没有用到this.x
所以你调用method方法的时候,和类的成员变量x没有关系。
作者: 邵天强    时间: 2012-11-15 11:53
本帖最后由 邵天强 于 2012-11-15 12:01 编辑

运行结果:10
详细分析:
Example t=new Example();//你首先创建了一个Example对象,
然后t.method(5)调用了method方法,而在Example中有一个成员变量x=12,有局部变量x
,通过Debug很容易理解

往下调试:

你可以试一下,一般对结果不明白的可以通过调试,很容易明白怎样运行的
作者: 聽聽我dē❤    时间: 2012-11-15 11:58
答案就是10,在主函数中调用的是method()方法传过去的X的值,与方法外X的值无关。
作者: 奋斗的青春    时间: 2012-11-15 12:03
  1. /**
  2. *
  3. */
  4. package com.itheima.javaoop.polymorphism;

  5. /**
  6. * @author Administrator
  7. *
  8. */
  9. public class Test {
  10.         /*
  11.          * 采取就近原则 ,函数中有的就先用函数里面声明的局部变量 ,如果没有则使用类成员变量 。
  12.          */
  13.         int x = 12;

  14.         public void method(/* int x */) {
  15.                 x += x;
  16.                 System.out.println(x);
  17.         }

  18.         public static void main(String[] args) {
  19.                 Test t = new Test();
  20. //                t.method(5);
  21.                 t.method(); // 结果为24
  22.         }
  23. }
复制代码

作者: 种生祥    时间: 2012-11-15 12:21
结果:10
x+=x;//用的全是局部的x
作者: 侯凯斌    时间: 2012-11-15 12:22
吴愿涛 发表于 2012-11-15 12:03

感谢老师这么细心为我分析啊,太感谢了:#
作者: jerry2627    时间: 2012-11-15 12:37
.......度娘都能帮你解决




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