老是被值传递和引用传递搞的晕头转向。转自http://blog.csdn.net/zzp_403184692/article/details/8184751,本文对其稍加修改。
1.对于值传递
class Test
{
//private int age=0;
public void A(int age)
{
age=20;
System.out.println("test中的age值为"+age);
}
}
class yinyong
{
public static void main(String[] args)
{
Test t=new Test();
int age=30;
t.A(age);
System.out.println("main中的age值为"+age);
}
}
打印结果为
test中的age值为20
main中的age值为30
说明age的值并未被修改。
2.对于引用传递
看下面代码
class A
{
public int age=0;
}
class Test
{
public void testA(A a)
{
System.out.println("test1中的age的值为"+a.age);
//a=new A();
a.age=61;
System.out.println("test2中的age的值为"+a.age);
}
}
class yinyong
{
public static void main(String[] args)
{
Test t=new Test();//创建Test对象
A a=new A();//创建A对象
a.age=10;//将A对象中的变量age赋值为10
t.testA(a);//关键的一句代码 将a的引用传递给testA(),所以testA()函数的第一句打印出a.age=10,紧接着将对象a中的值赋值为61,故打印出a.age=61.
System.out.println("main中age的值为"+a.age); //下面紧接着也打印出a.age=61;
}
}
打印结果为:
test1中的age的值为10
test2中的age的值为61
main中age的值为61
如果在testA()代码中加入一行代码a=new A(),则打印结果为:
test1中的age的值为10
test2中的age的值为61
main中age的值为10
说明main中的a.age没有被修改。
下面即便文章写的很不错
http://guhanjie.iteye.com/blog/1683637