读书人

关于变量的实例域有关问题

发布时间: 2012-01-14 20:02:35 作者: rapoo

关于变量的实例域问题
public class Test
{
int x;
public static void main (String[] args)
{
int x=1;
System.out.println(x);
Test test=new Test();
System.out.println(test.x);
test.assign1();

//assign1使用完应该有使x为2,为什么x会变0,它要清除堆栈也要运行x=2

System.out.println(test.x);
test.assign2();
System.out.println(test.x);
System.out.println(x);

}
public void assign1()
{
int x=2;
}
public void assign2()
{
x=3;
}
}

运行结果: 1
0
0
3
1

1. 第三个为什么是0,assign1()方法使用完应该有使x为2,为什么x会变0,它要清除堆栈也要运行x=2


2. 一开始的 int x 到底有没有分配空间,是不是只要是变量都会分配一块固定的空间,还是 需要 产生一个对象才能分配一块空间?


[解决办法]
结果正常

问题是是 你把 局部变量 x 与成员变量弄混了

public void assign1()
{
x=2; //这样才是对成员x赋值
}

x 肯定肯定分配空间了

不然 你为什么会打印出0呢 默认就是0

局部变量与成员变量不要重名 很难调试呢
[解决办法]
1、这个assign1()只是产生了一个零时变量x,没有对成员变量产生影响
2、分配了,但是因为这个是简单类型,如果是Integer x的话应该只是创建了一个引用

读书人网 >J2SE开发

热点推荐