首先,java中只有值传递吗?
其实有些人认为有,有些人认为没有,各有各的道理
怎么理解呢?
java中传递对象做为参数时,实际上传递的只是这个对象引用的一个拷贝,读起来可能有点难以理解,这里看个例子:
public class Example {
String account = "hello";
public static void main(String[] args) {
// TODO Auto-generated method stub
Example e = new Example();
e.change(e);
System.out.print(e.account);
}
void change(Example e){
e.account="hello1";
}
}
这里的输出是hello1,和我们所预期的一样,可能这里我们会觉得这不就是引用传递吗!!其实这里传递的只是Example对象引用的一个拷贝,听名字,只是个拷贝,自然与原引用不相干了。只是这两个引用指向的内容一样,所以我们改变内容的时候,原对象的内容也跟着变了!
再看一个例子:
public class Example {
String account = "hello";
public static void main(String[] args) {
// TODO Auto-generated method stub
Example e = new Example();
e.change(e.account);
System.out.print(e.account);
}
void change(String a){
a="hello1";
}
}
这里输出是hello ,可以发现,这次account值没有被改变了,为什么呢?
其实这里传递的也是对象引用的拷贝,只是这里传递的是个 String对象:account对象引用的拷贝 a,可以看到,在change方法中 a 指向了“hello1”,这时候相当于a 和account 这两个引用分别指向了不同的内容,这时候a引用所指向的内容变了,自然跟account所指向的内容没有任何关系了!
最后总结一下,为什么当传递对象做为参数时,这么像是引用传递!
这是因为传递的是引用的拷贝,如果你不将这个 冒牌货 指向一个新的内容(对象),那么他指向的对象还是原来那个呀!那当你去操作这个引用所指的对象其实还是在操作原有的内容。