代码:
public class TestString { String str = new String("good"); char [] ch = {'a','b','c'}; public static void main(String[] args) { // TODO Auto-generated method stub TestString ex = new TestString(); ex.change(ex.str,ex.ch); System.out.println(ex.str+"and"); System.out.println(ex.ch); } public void change(String str2, char[] ch2) { System.out.println("交换前:" + str2); //result is the same //str2 = new String("test ok"); str2 = "test ok"; System.out.println("交换后:" + str2); ch[0] = 'g'; } }
输出结果:
交换前:good
交换后:test ok
goodand
gbc
分析:因为String类是一个不可变类型,从变量被声明时,内存大小已经固定了,如果要改变它的值,会重新开辟新的内存存储,所以输出的str还是初始化的那个,即String类型作为方法的形参并不会改变字符串内容。