站点图标 度崩网-几度崩溃

下面代码的输出是?

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]; 这段,输出值不会改变,原理同上。