A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小刚 中级黑马   /  2012-5-7 21:55  /  1895 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
  }
}

6 个回复

倒序浏览
因为你把X定义成静态的  实际上也好,t.x也好  其实在内存中都是指向同一个东西
回复 使用道具 举报
楼主为什么要用static呢?
回复 使用道具 举报
Test t = new Test();   此处x=5
t.x++;    x变为6
change(t);  x变为8
System.out.println(t.x);  输出8
你在change方法里对x进行了加2操作,堆内存中的x已经变化了。
回复 使用道具 举报
我补充下,正是因为x是静态的成员变量,那么该x是优先于t对象存在的,直接打印x应该是打印类中的x,而类中的x应该是5呀。怎么输出是8呢
回复 使用道具 举报
呵呵  static int x=5;  是一个静态全局变量了,不管你在哪调用,通过什么方式调用,最终都会指向  x ;
那的  t.x   和直接调用  x   是等效的所以  x=8
回复 使用道具 举报
静态的变量啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马