面试的时候遇到这样一个问题
package com.fisher.string;
public class TestStringChange {
public void change(String a, char[] b) {
a = "Jennfier";
b[0] = 'F';
}
public static void main(String[] args) {
TestStringChange test = new TestStringChange();
String a = "Fisher";
char[] b = { 'f', 'i', 's', 'h' };
test.change(a, b);
System.out.println(a);
System.out.println(b);
}
}
这个是比较容易迷惑的问题。
String 是对象,传引用调用后,穿过方法
change 里去的a 是一份指向"Fisher"对象的指针,当 在change里面改变后,指向别的对象“Jennfier"后,在原来的main 方法里不受影响,改变的不是"Fisher"对象,而是改变该方法的指针a 的指向
但是char[] 数组就会改变了,因为在change 方法里改变的是char[] 数组的内容
答案是
Fisher
Fish