方法调用完后,内存中的堆栈是怎么变化的呀?(例子)
下面这个例子输出结果为:
AB@AB
AB
B
我想问下,在test方法中,s2=s1,此时s2他s1的值是相等的。s1.append(s2),s1的值变了,但是s1引用没变。等test方法结束后,内存中的堆栈是怎么变化的?谢谢了?
package com.expert58.practice;
public class PracticeDemo2 {
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder("A");
StringBuilder s2 = new StringBuilder("B");
test(s1, s2);
System.out.println(s1);
System.out.println(s2);
//System.out.print(s1 + "~" + s2);
}
private static void test(StringBuilder s1, StringBuilder s2) {
s1.append(s2);
s2 = s1;
System.out.println(s1 + "@" + s2);
}
}
------解决方案--------------------
package com.expert58.practice;
public class PracticeDemo2 {
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder("A");
StringBuilder s2 = new StringBuilder("B");
test(s1, s2);
System.out.println(s1);
System.out.println(s2);
//System.out.print(s1 + "~" + s2);
}
private static void test(StringBuilder s1, StringBuilder s2) {
s1.append(s2); //这里的s1不是main的s1,只是指向了和main的s1指向相同的对象
s2 = s1; //这里的s2也不是main的s2,所以这里是改变test方法的s2的指向,不影响main的s2指向
System.out.println(s1 + "@" + s2);
}
}
就打个比方,我和你一起浏览这个页面,你的回复我能看到,我的回复你也能看到,因为我们浏览的是相同的页面,但不等于你就是我,而此时,如果你链接到别的页面去了,也就相当于test里的s2 = s1; test的s2链接到别处了,但main的s2没有动,此时你觉得我看到的页面会跟你一样吗?