java 传参

来源:互联网 发布:win域名 编辑:程序博客网 时间:2024/06/06 02:31

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,所以有了第二个例子的现象







0 0