记录一下!才知道java中没有引用传递!!
首先看什么是值传递和引用传递
值传递(pass by value)
值传递是指在调用方法时将实参复制一份传递到方法中,这样当方法对形参进行修改时不会影响到实参。
引用传递(pass by reference)
引用传递是指在调用方法时将实参的地址直接传递到方法中,那么在方法中对形参所进行的修改,将影响到实参。
简单说就是看 调用方法时有没有对实参进行复制。方法内对形参的修改会不会影响到实参。
基本数据类型肯定是值传递这个没有争议
问题是引用类型难度不是引用传递吗?
看代码
public class Cmower {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Cmower cmower = new Cmower();
cmower.setName("我是main");
cmower.sop(cmower);
System.out.println("main 中的 cmower " + cmower.getName());
}
public void sop(Cmower cmower) {
cmower.setName("我是sop");
System.out.println("sop 中的 cmower " + cmower.getName());
}
}
结果
sop 中的 cmower 我是sop
main 中的 cmower 我是sop
这么一看不对啊,这不就是引用传递嘛!
我们在代码中加上一个对象对比一下
Cmower cmower = new Cmower();
cmower.setName("我是main");
Cmower old = cmower;
cmower.sop(cmower);
System.out.println("main 中的 cmower " + cmower.getName());
System.out.println(old == cmower);
结果
sop 中的 cmower 我是sop
main 中的 cmower 我是sop
true
这回看出来了,确实是值传递,引用类型在调用有参方法的时候,传递的是对象的引用,并不是对象本身。而对象的引用在传递的过程中并没有发生改变,虽然对象本身发生了变化。
总结
基本类型作为参数被传递时肯定是值传递;引用类型作为参数被传递时也是值传递,只不过“值”为对应的引用。
标签:Java,cmower,传递,sop,引用,Cmower,main,只有 From: https://www.cnblogs.com/Cloong/p/16794888.html