个人觉得java是传值,当参数类型是基本类型,复制的是值,而当参数是引用类型时,复制的也是值,只不过这个值是地址。如下例调用change(A a)有几个过程:
(1)创建一个临时变量
(2)将实参的值复制给临时变量,由于是引用变量,实参的值是一个地址,故存的也是同一个地址
(3)方法中改变了临时变量所指向的地址,而实参指向的地址没变
change(String str)同理,改变的是临时变量所指向的地址,实参指向的地址没变。
public Demo
{
public static void main(String[] args)
{
A a = new A();
System.out.println(a.x);//10
change(a);
System.out.println(a.x);//依然是10
}
public static void change(A a)
{
a = new A();
a.x = 20;
}
public static void change(String str)
{
str = "new string value in string pool";
//str = new String("new string in heap");
}
}
class A
{
public int x = 10;
}