当前位置: 技术问答>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。请答疑,谢谢!
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
copy被一句y=x赋值后,虽然local reference y是指向一个新的Object(形同StringBuffer("AB")),但是在该method返回后,b还是b,不关y的事。所以输出b还是B
|
纠正:
输出为AB AB
AB B
输出为AB AB
AB B
|
public static voidoperate(StringBuffer x, StringBuffer y){
x.append(y);
y = x; // 无论这个y = ? 都没关系, 它只是b 的一个Copy .
}
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。