java 传参这个问题,对于简单类型是直接值传递,复杂类型是引用传递,值传递先不说了,引用传递用两个例子说明。主要是说明一下String传递的一个容易错的地方。。。
例子1
public class Test {
public static void changeString(StringBuffer a){
a .append( " ,world" );
}
public static void main(String [] args){
StringBuffer a = new StringBuffer("Hello");//'= "Hello";
System.out.println(a);
changeString(a);
System.out.println(a);
}
}
输出结果是:
Hello
Hello ,world
结果显而易见,这是一个引用传递,在函数changeString中改变了原来的字符串,而仔细看时,发现这个例子用的是StringBuffer这个类,为什么不用String呢,因为String没有append这个方法,学渣是个喜欢问为什么的人,于是乎,自己写一个String的例子,如下
public class Test {
public static void changeString(String a){
a += " ,world" ;
}
public static void main(String [] args){
String a = new String("Hello");//'= "Hello";
System.out.println(a);
changeString(a);
System.out.println(a);
}
}
输出结果是:
Hello
Hello
学渣第一次看到这个结果时,几乎颠覆了世界观,难道java的引用传递分情况么,后来上网一查才知道。。。让String骗了。。。。
其实概念中的传引用是图1这个样子的
而我们的String的+=或者=都是相当于new了一个新的字符串,并把指针指向了新的字符串,旧的字符串根本没动,如图2,所以有了第二个例子的现象