qtlkw 发表于 2013-1-26 13:31:01

java String type传值

一般大家都清楚primitive type传值的话,不会改变原有值。
For example:
public class TestPrimitiveType {int original = 9;    int[] arr = {1, 2, 3};         public static void main(String args[]) {    TestPrimitiveType ti = new TestPrimitiveType();         ti.change(ti.original, ti.arr);         System.out.print(ti.original + " and ");         System.out.println(ti.arr + " " + ti.arr + " " + ti.arr);       }         public void change(int original, int[] arr) {      original = 100;      arr = -1;    }}
输出: 9 and -1 2 3

再测试一下它的wrapper类:
public class TestInteger {Integer obj = new Integer(9);         Integer[] arr = {1, 2, 3};         public static void main(String args[]) {    TestInteger ti = new TestInteger();         ti.change(ti.obj, ti.arr);         System.out.print(ti.obj + " and ");         System.out.println(ti.arr + " " + ti.arr + " " + ti.arr);       }         public void change(Integer obj, Integer[] arr) {         obj = 100;         arr = -1;    }}
输出: 9 and -1 2 3,跟它的primitive type一样,并没有在调用change方法后改变其值。

测试一下String类也一样。
public class TestString {String obj = new String("not changed");         char[] arr = {'a', 'b', 'c'};         public static void main(String args[]) {       TestString ts = new TestString();         ts.change(ts.obj, ts.arr);         System.out.print(ts.obj + " and ");         System.out.println(ts.arr);       }         public void change(String obj, char[] arr) {         obj = "changed";      arr = 'w';    }}
输出: not changed and wbc,因为String是final class,而且在java方法中String类的调用占80%,因此java对String类做了特殊处理,当String值传递到change方法时,你可以理解为其实是传递了一个拷贝过去,拷贝的obj指向新创建的字符串"changed",但并不改变原有obj的指向。
页: [1]
查看完整版本: java String type传值