java问题!!!!

请教java高手下面这个程序中,x是全局变量,虽然函数B修改了x的值,但是并不影响全局变量x的值啊!!!所以System.out.println(c.x)输出的应该是0,怎么结果却是1啊???求详解!!!
public class A {
int x;

void B() {
x++;
}

public static void main(String [] args) {
;
A c=new A();
c.B();
System.out.println(c.x);

}
}
此程序中局部变量x只是在函数B内部修改修改成员变量x的值,离开函数B后,受成员变量的影响,x的值还应该是0啊!!所以输出的结果为0,我这种理解有何不对!!请高手解释一下,谢谢!!!

public class A {
int x;
这里你定义的是类的成员变量,是这个类实例化创建对象以后,对象的一个成员,你创建了对象,并调用了加1的方法,当时最后输出这个对象的 x 成员时,是加1之后的也就是 1了。

你可以这样测试,
1、在main 函数中 定义一个变量 int x = 0;
2、改写 你的成员函数 void B() 为 void B(int x);
3、调用函数 c.B(x);
4、输出 System.out.println(c.x);

即:
public class A {
int x;

void B(int x) {
x++;
}

public static void main(String [] args) {
int x = 0;
A c=new A();
c.B(x);
System.out.println(c.x);

}
}

这里的函数void B(int x) 里面的参数 x 相对于类中你定义的成员变量x来说,就是局部的变量,这个变量的更改不会影响类中的成员的 x 的值
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-19
x没有定义,所以默认是0;
你调用了B(),所以x+1了变成了1.
除非x定义为final类型,那么就不能对它修改了啊。
第2个回答  2011-12-20
A c=new A(); 这句话的时候 初始化了 x的值为0;
调用B()方法 x++, 这里有一个隐含的东西 其实是 this.x++ 也就是调用这个方法的对象的属性x的值++ 变为1,再输出 c.x 为1
x是成员标量 属于实例化后的对象的
第3个回答  2011-12-21
说的全局变量,是这个类中任何方法都可以调到,并使用它,改变它是正常的啊,因为全局,所以你调的是一个变量,在B方法中他的值都变化了,当然要改变了。
如果是局部变量就行了,出了当前方法改变的,别的方法就不可能改变它了。
第4个回答  2011-12-19
影响的,首先x是A类中的成员变量(属性),不赋值的时候会有个默认值,整形为0,在测试类里调用了B()方法,因为里面有++的操作,所以会自加,值当然会改变了,
饿,说的麻烦了,重新说一下原理
因为你开辟了一个整形空间,地址就是是唯一的,因为对空间执行了++操作所以空间里的值改变了,所以再调用这个地址空间的时候值也就改变了追问

局部变量不会影响全局变量啊!!!所以输出的x的值为0啊!!!怎么x的值会改变成为1!!!

追答

局部变量是会影响全局变量的,饿,为什么不会影响呢,调地址的时候他俩都是指向一个空间,而空间里的只改变的时候,你在调用这个空间地址里的值得时候,不就改变了么?

第5个回答  2011-12-21
如果你要x始终等于0就设置成终态的(final),如果你要让它成为全局变量就设置成静态的(static),
int x;这算个什么全局变量,你System.out.println(x);能调用到吗?
相似回答
大家正在搜