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


已注销
5 声望0 粉丝