乐趣区

java引用传递中的String

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

退出移动版