有一类如下:
public class Test{public static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
public static void main(String args[]){
StringBuffer buffA=new StringBuffer("a");
StringBuffer buffB=new StringBuffer("b");
operate(buffA,buffB);
System.out.println(buffA+","+buffB);}
问各位大侠,不上机运行,你认为该程序输出什么?为什么是那个结果?
请教!
若是把最后一句改成System.out.println(buffA+buffB)会怎样呢?
public class Test{public static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
public static void main(String args[]){
StringBuffer buffA=new StringBuffer("a");
StringBuffer buffB=new StringBuffer("b");
operate(buffA,buffB);
System.out.println(buffA+","+buffB);}
问各位大侠,不上机运行,你认为该程序输出什么?为什么是那个结果?
请教!
若是把最后一句改成System.out.println(buffA+buffB)会怎样呢?
解决方案 »
- 关于String比较的问题,在线等.....
- java利用windows api控制麦克风音量??
- JDK1.6中Jtable排序,列标题有时候出现上下方向键头,有时候不出现????
- 有关System.out和System.err的源码
- 关于java的基础与J2EE的关系
- 对象比较问题!在线等待......及时揭帖
- 字符替换
- 如何设置jdk,使得java Applet可以连接oralce
- 同步异步是指线程同步!异步................?以及相关的问题啊
- 我快疯了,非典也不过如此,救救我!!
- 如何在JTextArea中实现文本随时间的自动滚动(像迷你歌词一样)??
- 编译通过运行时出错,不知何故?急,盼解。谢谢!
因为java里面只是对String重载了+运算符。
x,y,buffA指向同一个对象“ab"
buffB指向b
buffA----->a
buffB----->b当调用operate(buffA,buffB);以后就变成:
buffA=x------>a
buffB=y------>b
当x.append(y);时,因为buffA=x是指向同一个对象,所以buffA=x------>ab
而当y=x;又有
y--------->ab而buffB不便仍指向b
当x.append(y);时,因为buffA=x是指向同一个对象,所以buffA=x------>ab
而当y=x;又有
y--------->ab我就是这里不太明白,buffA=x是指向同一个对象 那么buffB=y不是指向同一对象?
string,stringbuffer传参数到底是怎样的呢?
结果是ab,b
x,y,buffA指向同一个对象“ab"
buffB指向b有因为 java只有值传递 所以
operator方法中的y=x 对于外部的 buffB没有效果所以 应该是 改前ab,b
至于 改后 应该为abb吧 +运算可能会进行 toString()方法造作的 我也不确定
等一下 做个例子看看 呵呵
改了报错了"Test.java": operator + cannot be applied to java.lang.StringBuffer,java.lang.StringBuffer at line 13, column 29
由于StringBuffer按地址传递
一开始
buffA-->a,
buffB-->b,
当调用operate()方法时候x-->a,y-->b,
x.append(y);
后,buffA,x-->ab
y=x后,y-->ab
返回来时候,buffA-->ab,buffB-->b,所以就是ab,b
改之后由于StringBuffer出错误
不知道我的理解可以吗,还望指正
你怎么搞清楚了啊
说一下啊