Java的参数传递是值传递还是引用传递?其实这题是问那些从C++转向Java的程序员的,因为在C++中,有一种叫指针的东西,而在Java的世界中,屏蔽了容易让程序员犯错的指针(其实内部只是封装了指针,很多功能的实现其实还是通过指针的),也因此让问题变得更加简单,在java核心技术卷I里有一个结论:java中没有引用传递,只有值传递。
public class PramaTest {
public static void main(String[] args) {
Apple apple = new Apple();
apple.setColor("red");
apple.setSize("10");
PramaTest test = new PramaTest();
test.change(apple);
System.out.println(apple);
}
public void change(Apple apple) { // 传递的是对象引用的拷贝。
Apple apple2 = new Apple() ;
apple2.setColor("green") ;
apple2.setSize("20") ;
apple = apple2 ; // 是把apple2的地址,给了形参这个对象引用的拷贝,所以不会影响到原对象。
System.out.println(apple);
}
/*
public void change(Apple apple) { //运行change这个方法时,方法得到的是对象引用的拷贝,原引用apple和形参apple同时引用同一个对象,所以函数运行结束后,形参apple已经消失了,但是对引用对象的更改却影响了主函数原引用apple所引用的同一对象,指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变。
apple.setColor(“green”) ;
apple.setSize(“20″) ;
System.out.println(apple);
}*/
}
class Apple {
private String color ;
private String size ;
public void setColor(String color) {
this.color = color ;
}
public void setSize(String size) {
this.size = size ;
}
public String toString() {
return "color = "+ this.color + ", size = "+ this.size ;
}
}
上述解释有不妥的地方,求大神们指导。
|