一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
2024-10-21 12:27:51
前几天又看到这个面试题,再次看看
public class Jtest{ public static void main(String[] args) { StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer ("B"); oper(a,b); System.out.print(a+","+b); } static void oper(StringBuffer c,StringBuffer d){ c.append("B"); d=c; } }
------输出结果是什么?
此题关键就在于 oper(c,d) 方法,这个方法到底做了什么,怎么结果就和想的不一样呢?
那么,就来看一下这个方法做了什么。
上代码:
package test;
public class Jtest{
public static void main(String[] args) {
StringBuffer a=new StringBuffer ("A");
StringBuffer b=new StringBuffer ("B");
//取代 oper(a,b) start;
StringBuffer c;
StringBuffer d;
c = a; //c的地址指向了a,此时 c 的值为"A";
d = b; //d的地址指向了b,此时 d 的值为"A";
c.append("B"); //在c(a)的地址值变为 “AB”
d=c; // d的地址指向了c,也就是指向了a,**关键就在这里了**,那么可以看到,这个过程中根本就没对b做任何操作,
//就好像gg(d)路过一mm(b),说:这mm(b)不错,然后发现前面有个更有吸引力的mm(c)然后就见异思迁了,然后拿了一朵花("B")给mm(c(a))了,,所以mm(b)压根就不知道什么情况,没参与
// so, b 还是b("B") , a已不是a("A"),二是a("AB")
//取代 oper(a,b) end;
System.out.print(a+","+b);
}
static void oper(StringBuffer c,StringBuffer d){
c.append("B");
d=c;
//一开始的想法是这样的,c = a; d= b; 那么 c.append("B");后 c=“AB”,d=c = "AB",实际上并不是数学中的简单等价传递
}
}
最新文章
- 时隔一年再读到the star
- CSS3中的动画功能(二)
- 在 IIS 6 和 IIS 7中配置Https,设置WCF同时支持HTTP和HTPPS,以及使用HttpWebRequest和HttpClient调用HttpS
- HDFS-RAID原理和实现
- js基础第七天
- wdcp日志
- OCP-1Z0-051-题目解析-第33题
- bzoj 3333: 排队计划 解决问题的方法
- 关于map()与filter()
- nodejs实践-代码组织
- js鼠标滚轮事件兼容
- app后端设计(5)-- 表情的处理
- MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
- 2073: [POI2004]PRZ
- OpenGL——二维几何变换
- 『Collections』namedtuple_具名元组
- redis.conf 具体配置详解
- UESTC--1267
- django在windows设置定时任务,勉强能用
- vue数据已渲染成 但还是报错 变量 undefined