共计 360 个字符,预计需要花费 1 分钟才能阅读完成。
public class test {
public static void main(String[] args) {
String str = "hello"; // 1
changeStr(str); // 2
System.out.println(str); //4
}
public static void changeStr(String temp) {temp = "java"; // 3}
}
1 处执行后在堆内存中开辟一个空间存放 hello; 同时占内存存放 str;
2 处执行函数;
3 处是参数传递的关键所在,当执行 3 时,因为 string 是不可变对象,所以堆内存中重新开辟一个空间存放 Java,并且 temp 指向该值(执行到这里时,原来的 str 引用 hello 依然不变)
代码执行到 4 处 temp 已然销毁,而 Java 也失去了引用 等待 JVM 的清理,所以最终 str 的值依然指向 hello
正文完
发表至: java
2019-09-04