下面这个例子输出结果为:
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); }}
解决方案 »
- aaa|bbb|ccc|用replace怎么把|替换掉?
- 这段代码中的第33行为什么不起作用?
- 什么是java文档?帮助文档?
- 关于数据库连接奇怪的现象,回复必有分,今天下午接分!
- 关于线程运行与暂停的控制,请大家看看我的代码,总是不能控制线程的运行和暂停
- 关于JAVA工具和教程
- 关于防火墙的问题
- 求助 坦克大战项目的问题
- 欢迎有兴趣的朋友一起来研究基于UDP穿透NAT的QQ类通讯软件(JAVA编写)
- 关于jdbc连接sql server
- 用java 编写程序求最大连续递增的有序子串(求解)???遇到的问题
- 使用JarOutputStream和Manifest类生成jar文件时,manifest.mf中文出现乱码,如何解决?
坐等大牛解释
public class PracticeDemo2 {
private static void test(StringBuilder s1, StringBuilder s2) {
s1.append(s2);
System.out.println(s1.hashCode());//hashcode=12677476
System.out.println(s2.hashCode());//hashcode=33263331
s2 = s1;
System.out.println(s2.hashCode());//hashcode=12677476
System.out.println(s2);//AB
}
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder("A");
System.out.println(s1.hashCode());//hashcode=12677476
StringBuilder s2 = new StringBuilder("B");
System.out.println(s2.hashCode());//hashcode=33263331
test(s1, s2);
System.out.println(s1);//AB
System.out.println(s2.hashCode());//hashcode=33263331
System.out.print(s2);//B
System.out.print(s1 + "@" + s2);//AB@B
}
}
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没有动,此时你觉得我看到的页面会跟你一样吗?