黑马程序员技术交流社区

标题: 问题在代码中间 [打印本页]

作者: 王小刚    时间: 2012-5-7 21:55
标题: 问题在代码中间
public class Test{
  static int x=5;
  public static void main(String[] args){
      Test t=new Test();
      t.x++;
      change(t);  
      System.out.println(t.x);/*这个地方,我把t.x 换成x,
          为什么还是输出8? t.x调用是对象T中的x,而x不是应该是类Test里面的吗?
          */
  }
   static void change(Test m){
      m.x+=2;
  }
}

作者: 蒋映辉    时间: 2012-5-7 22:45
因为你把X定义成静态的  实际上也好,t.x也好  其实在内存中都是指向同一个东西
作者: 于潇    时间: 2012-5-7 22:47
楼主为什么要用static呢?
作者: Zhang_qian    时间: 2012-5-7 22:53
Test t = new Test();   此处x=5
t.x++;    x变为6
change(t);  x变为8
System.out.println(t.x);  输出8
你在change方法里对x进行了加2操作,堆内存中的x已经变化了。
作者: 王小刚    时间: 2012-5-8 17:51
我补充下,正是因为x是静态的成员变量,那么该x是优先于t对象存在的,直接打印x应该是打印类中的x,而类中的x应该是5呀。怎么输出是8呢
作者: It's_Zero    时间: 2012-5-9 12:24
呵呵  static int x=5;  是一个静态全局变量了,不管你在哪调用,通过什么方式调用,最终都会指向  x ;
那的  t.x   和直接调用  x   是等效的所以  x=8
作者: 高云飞    时间: 2012-5-9 12:46
静态的变量啊。




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