public class TestExchange {
String str = new String("1");
char[] arr = { 'a', 'b', 'c' };
public static void main(String[] args) {
TestExchange te = new TestExchange();
te.exchange(te.str, te.arr);
System.out.print(te.str + " ");
System.out.print(te.arr);
}
public void exchange(String str, char arr[]) {
str = "2";
arr[0] = 'd';
}
}
参考答案
输出
1 dbc
分析:
- te 对象的 str 属性被 exchange 方法处理过之后,仍然指向字符串常量缓冲区 “1”
- arr 属性是个数组,在 exchange 方法中,数组的内部第一个位置的值被修改,是生效的。如果加上 arr = new char[0]; 这段,输出值不会改变,原理同上。