代码:
public class Test {
public void change(char c, char ch[], Character character, String string) {
c = '!';
ch[0] = '!';
character = '!';
string = "!!!";
}
public static void main(String args[]) {
char c = 'a';
char[] ch = {'a', 'b', 'c'};
Character character = new Character('a');
String string = new String("abc");
Test ex = new Test();
ex.change(c, ch, character, string);
System.out.println(c);
System.out.println(ch);
System.out.println(character);
System.out.println(string);
}
}
八大基本数据类型为值传递,除此之外,任何类都是引用传递,包括数组。 值传递方式传递的是副本,因此变量c本身不会改变;引用传递方式传递的是对象的引用,对形参的修改会使对象本身发生改变,因此数组ch会改变。
八大基本类型的包装类,以及String类,都是不可变类。一旦被创建,就不能被修改。 所以及时是引用传递,也不会改变。
程序运行结果如下:
StringBuilder是可变类,可以被修改。我们熟知的 String string = new String(“abc”); string += “def”; 实际上会创建一个新的内存并存放 “abcdef” ,string会指向新的字符串内存,而之前 字符串 “abc” 不会消失直至被垃圾回收器回收,因此会影响程序的运行效率。