public class Demo
{
int a;
public void print_0()
{
a = 1;
int b = 2;
char c='n';
g(b,c);
System.out.println(a + ", " + b + ", " +c);
}
public void g(int b, char c)
{
a=5;
b=8;
c='v';
}
public static void main(String args[])
{
Demo d = new Demo();
d.print_0();
}
}
5, 2, n
public class Demo2
{
int a;
int b;
public void print_1() {
a = 1;
b = 2;
char c='n';
g(b, c);
System.out.println(a + ", " + b + ", " + c);
}
public void g(int b, char c) {
a = 5;
b = 8;
c='v';
}
public static void main(String args[]) {
Demo2 d = new Demo2();
d.print_1();
}
}
5, 2, n
这不是全局变量和不是全局变量的问题,而是引用传递问题,在赋值时把b和c指向了新开辟的单元(栈内存指向堆内存),方法调用完以后,断开了与新单元的指向,所以值没有被保留下来,我是这么理解的,不知道对不对?
你可以试下下面两段代码:
================================
public class Demo {
int a;
int b;
public void print_4() {
a = 3;
b = 4;
g(a, b);
System.out.println(a + ", " + b );
}
public void g(int c, int d) {
c=5 ;
d =6 ;
}
public static void main(String args[]) {
Demo d = new Demo();
d.print_4();
}
}
这个运行结果是a=3 , b=4 。
==================================
public class Demo3 {
int a;
int b;
public void print_4() {
a = 3;
b = 4;
g(a, b);
System.out.println(a + ", " + b );
}
public void g(int c, int d) {
c = 5 ;
d = 6 ;
a = c ;
b = d ;
}
public static void main(String args[]) {
Demo3 d = new Demo3();
d.print_4();
}
}
这个运行结果是a=5 , b=6 。 作者: 邓超军 时间: 2012-7-10 09:16
a值,是直接改变其值;b,不管是全局变量还是局部变量,你函数中改变的b变量,是函数的局部变量。所以Demo2中
public void g(int b, char c) {
a = 5;
b = 8;
c='v';
}
改为public void g(int b, char c) {
a = 5;
this.b = 8;
c='v';
}
就会对全局b的值有影响。作者: 孙新强 时间: 2012-7-10 11:39
这个问题设计到两个方面的东西,一:成员变量和局部变脸的区别;二、参数的传递。(首先在此声明,这两个程序的结果只是参数传递造成的)
一、成员变量和局部变量的区别:
从来只有成员变量和局部变量的区别。
我们就好比一个类是一个公司,
成员变量就是这个公司的正式员工,一直存在,与公司同生同灭..
而局部变量就是临时工,公司请临时工来做一点事情,做完,临时工就没有了,被销毁了!
确实有人把成员变量叫成全局变量.那是以这个类作为全部
其实还有一种比成员变量更大的我建一个公用类,我在里面声明一个静态变量,那么,我在任何地方都可以用它