前几天又看到这个面试题,再次看看

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",实际上并不是数学中的简单等价传递
}
}

  

最新文章

  1. 时隔一年再读到the star
  2. CSS3中的动画功能(二)
  3. 在 IIS 6 和 IIS 7中配置Https,设置WCF同时支持HTTP和HTPPS,以及使用HttpWebRequest和HttpClient调用HttpS
  4. HDFS-RAID原理和实现
  5. js基础第七天
  6. wdcp日志
  7. OCP-1Z0-051-题目解析-第33题
  8. bzoj 3333: 排队计划 解决问题的方法
  9. 关于map()与filter()
  10. nodejs实践-代码组织
  11. js鼠标滚轮事件兼容
  12. app后端设计(5)-- 表情的处理
  13. MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
  14. 2073: [POI2004]PRZ
  15. OpenGL——二维几何变换
  16. 『Collections』namedtuple_具名元组
  17. redis.conf 具体配置详解
  18. UESTC--1267
  19. django在windows设置定时任务,勉强能用
  20. vue数据已渲染成 但还是报错 变量 undefined

热门文章

  1. 博弈论简单入门sb总结
  2. 微服务介绍及Asp.net Core实战项目系列
  3. (转)js数组与字符串的相互转换方法
  4. Selenium+Python自动化测试学习问题总结笔记
  5. 【Apache】 ab进行压力测试
  6. 【SIKIA计划】_06_Unity2D游戏开发-拾荒者笔记
  7. First Day!
  8. truffle Dapp 搭建
  9. Java面试中的Spring方面问题
  10. 第39次Scrum会议(12/5)【欢迎来怼】