当前位置:  技术问答>java相关

问题(在线等待)

    来源: 互联网  发布时间:2017-04-30

    本文导语:  public class Test{     public static void main(String[] args){         StringBuffer a = new StringBuffer("A");         StringBuffer b = new StringBuffer("B");         operate(a, b);         System.out.println(a + " , " + b);  ...

public class Test{
    public static void main(String[] args){
        StringBuffer a = new StringBuffer("A");
        StringBuffer b = new StringBuffer("B");
        operate(a, b);
        System.out.println(a + " , " + b);
    }
    public static voidoperate(StringBuffer x, StringBuffer y){
        x.append(y);
        y = x;
    }
}
答案是:AB , B 。为什么b的输出是B?我认为是AB,因为x和y的输出都是AB。请答疑,谢谢!

|
应该是这样,在voidoperate方法中存在一个reference copy,这个StringBuffer y虽然指向calling method中的b,但是它只是个copy。
copy被一句y=x赋值后,虽然local reference y是指向一个新的Object(形同StringBuffer("AB")),但是在该method返回后,b还是b,不关y的事。所以输出b还是B

|
纠正:
  输出为AB AB
     AB B

|


    public static voidoperate(StringBuffer x, StringBuffer y){
        x.append(y);
        y = x; // 无论这个y = ? 都没关系, 它只是b 的一个Copy .
    }

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3