- 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是基本类型
参考牛客网评论的解答