如何理解java的参数传递--值传递还是引用传递

先申明:java中的参数传递都是值传递,没有引用传递。
值传递的概念:值传递会为所传递的对象(这里的对象不是java里的对象object,而是一般意义上的对象)重新开辟一块空间,于是对所传对象的操作不会影响到原对象。
现象:有种说法是java中基本数据类型作参数是值传递,对象做参数是引用传递,我理解他的想法,在此不做任何评论。
理解:为什么对象做参数也是值传递呢?
分析:对象做参数传递的是对象的引用,暂且可以理解成对象的地址。由于是值传递,那么被传递的对象本身是不会有任何变化的,所以该对象的引用是不会发生任何变化的。
public class Yangkl
{
public void call(Test t)
{
Test t2 = new Test();
t2.setName("cba");
t.setName("abc");
System.out.println(t.name);
//这里改变了t,也就是t所代表的地址发生了变化,
//其实是所传对象的引用地址的复制发生了变化,本身对象的引用并没有变
//也就是说这里的值传递是把Test的引用作为值传递。
t = t2;
System.out.println(t.name);
}

public static void main(String args[])
{
Yangkl tYangkl = new Yangkl();
Test obj = new Test();
tYangkl.call(obj);
System.out.println(obj.name);
}
}

结果:abc
cba
abc

public class testClone {

public void changeA(A a){
a.name="b";
}
public void changInt(int i){
i=i*2+100;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
testClone test=new testClone();
A a=new A();
a.name="a";
System.out.println("before change : a.name="+a.name);
System.out.println("before change : a.hashcode="+a.hashCode());
test.changeA(a);
System.out.println("after change : a.name="+a.name);
System.out.println("before change : a.hashcode="+a.hashCode());
int i=1;
System.out.println("before change : i="+i);
test.changInt(i);
System.out.println("after change : i="+i);


A a1=new A();
A a2=new A();
System.out.println("a1.hashCode="+a1.hashCode());
System.out.println("a2.hashCode="+a2.hashCode());
a1.name="a1";
a2=a1;
System.out.println("a1.hashCode="+a1.hashCode());
System.out.println("a2.hashCode="+a2.hashCode());
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);

}

}
class A {
public String name;
}


结果:
before change : a.name=a
before change : a.hashcode=18508170
after change : a.name=b
before change : a.hashcode=18508170 虽然说a.name不同了,但是引用还是一个引用,所以这里是把引用做为值传递的。
before change : i=1
after change : i=1
a1.hashCode=17237886
a2.hashCode=8187137
a1.hashCode=17237886
a2.hashCode=17237886
a1.name=a2
a2.name=a2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值