先看一段代码:
public class JavaTest {
public static void changeStr(String str){
str="welcome";
}
public static void main(String[] args) {
String str="1234";
changeStr(str);
System.out.println(str);
}
}
String不是引用类型吗?为什么输出来的还是1234?
针对 @喵了个咪 的回答,贴段代码:
public static void change(List list){
list.add("welcome");
}
public static void main(String[] args) {
String str="1234";
List<String >list = new ArrayList<>();
list.add(str);
change(list);
assert list.size() == 2;
}
String 是不可变的,所以你在函数体内部做的改变不可能修改这个变量本身地址的值,而是在另一个地址新建了一个String 类型的变量,而你获取不到这个新建的变量的地址,函数执行完毕这个变量就可能会被回收。