论Java 参数传递

时间:2021-01-08 21:24:19
public class Test {
public void modify(Dog dog ,int l) {
//函数内修改了传入的参数
dog.setLeg(l);
l = 10;
System.out.println("During:dog'leg"+dog.getLeg()+" l:"+l);
}
public static void main(String[] args) {
Dog d = new Dog(4);
int l = 2;
System.out.println("Before:dog'leg"+d.getLeg()+" l:"+l);
new Test().modify(d, l);
System.out.println("After:" + d.getLeg()+" l:"+l);//After:2
// 运行结果
//Before:dog'leg4 l:2
//During:dog'leg2 l:10
//After:2 l:2
}
}


不纠结于传值还是传引用(实际是值传递)

java在函数调用时,参数传递时先将参数拷贝一份然后传给函数,基本类型和引用类型的区别在于,引用类型保存的是某一对象在堆空间的地址,而基本数据类型保存的是内存本身,传入引用类型Dog d(一块地址XXXXXXXX)后,虽说传入是d的copy(同样是XXXXXXXX),但这块copy和我原来的对象指向的是同一块堆空间啊,函数通过这个copy找到我在堆空间的东西后一通乱改,改完后我d指向的位置(XXXXXXXX)虽然没变,但是位置里面的东西改变了阿.

基本数据类型传入的也是copy但是,在java中基本数据类型保存的内存本身,copy也是一块内存,这块内存中保存的是具体的数据,而不是引用类型的一块地址.这块copy传入后会被修改,但是修改后却与我原来的数据无关.所以基本类型传入后数据不会变.