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]