很多时候,会遇到函数调用,有的时候看起来像是,值传递,比如
int a = 2;
fun(a);
System.out.printf(a);
private static void fun(int a){
a = a + 1;
}
输出结果为2
然而!
String a = "abcde";
String b = new String("abcde");
user c = new user();
c.setName("abcde");
fun(a);
fun(b);
fun(c);
Log.d("结果",a+","+b+","+c.getName()+","+(a==b));
private static void fun(String a) {
a = a.substring(2);
}
private static void fun(user a) {
a.setName("cde");
}
private class user{
private String name;
private void setName(String name){
this.name = name;
}
private String getName(){
return name;
}
}
结果却另人诧异
D/结果: abcde,abcde,cde,false
String倒还没什么事,我自定义了个类,结果传过去的时候居然成了“引用”?
是真的引用么,这样难不成java有某种自动分辨的能力?
(我顺便还测了测==,这个对比的是地址)
其实,可以是用一个思路去解释两种现象的
Java中传参都是值传递,如果是基本类型,就是对值的拷贝,如果是对象,就是对引用地址的拷贝。
仔细琢磨下,就恍然大悟了!
所以啊,基础还是要学扎实