黑马程序员技术交流社区
标题:
问题在代码中间
[打印本页]
作者:
王小刚
时间:
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