一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
2017-04-30 10:40
471 查看
前几天又看到这个面试题,再次看看
------输出结果是什么?
此题关键就在于 oper(c,d) 方法,这个方法到底做了什么,怎么结果就和想的不一样呢?
那么,就来看一下这个方法做了什么。
上代码:
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",实际上并不是数学中的简单等价传递 } }
相关文章推荐
- 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
- 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
- 面试题之String str = new String("abc"); 创建了几个对象
- 面试题之String str = new String("abc"); 创建了几个对象
- 面试题之String str = new String("abc"); 创建了几个对象
- 面试题--String s=new String("xyz"); 创建了几个对象
- 面试题之String str = new String("abc"); 创建了几个对象
- String str=new String("123"); 经典面试题再解析
- 答与微博前端教主在吃饭时讨论到的一道"微软面试题"
- String a=new String("abc")创建了几个对象
- 是谁在说String s = new String("xyz");创建了两个String Object?
- Java中的String str="abc"; String str=new String("abc");和String str = new String();的区别以及==与equals()的不同。
- [转]请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧
- String str = new String("abc")的问题?
- String s = new String("xyz");创建了几个String Object?
- 【java】 String str = "test"; 与 String str = new String("test"); 的区别
- 经典String str = new String("abc")内存分配问题
- SharePoint上传文件显示在label 页面Session["demo"] = new List<String>();(实现)
- String s = new String("aa") 创建了几个对象?
- String s=new String("abc")创建了几个对象?