public class StringTest {
String str = new String("good");
char[] ch = { 't', 'e', 's', 't' };
public void change(String a, char b[]) {
a = "test ok";
b[0] = 'b';
}
public static void main(String[] args) {
StringTest ex = new StringTest();
ex.change(ex.str, ex.ch);
System.out.println(ex.str);//good
System.out.println(ex.ch);//best
}
}
下面通过内存结构来说明这个问题
Java中有两种传递方式,值传递和引用传递。基本类型和以 str = "abc" 创建的字符串都是值传递,对象数组等都是引用传递。
String 是不可变类,a = "test ok" 等于是重新创建了一个对象,并不改变原来的值,数组是直接改变。
方法退出,a,b局部变量及 a 对应的 "test ok" 退出,此时内存结构
再次说明:如果这里的char型数组改为char类型,char值会改变吗?
public class StringTest {
String str = new String("good");
char ch = 't'
public void change(String a, char b) {
a = "test ok";
b = 'd';
}
public static void main(String[] args) {
StringTest ex = new StringTest();
ex.change(ex.str, ex.ch);
System.out.println(ex.str);//good
System.out.println(ex.ch);//t
}
不会,char是基本类型
参考牛客网评论的解答