有一类如下:
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)会怎样呢?
解决方案 »
- jar打包问题
- Java初始化的方法有几种?
- 在JDK1.1中Thread类定义了suspend()和resume()方法,但是在JDK1.2中已经过时,应使用什么方法来替代之?
- 看orelly‘s NIO 中的问题
- 谁有java GUI的教程?
- 关于java socke的问题
- 最后10分请教一个超级简单的问题。(关于字符串)(谁答的快谁得分)
- 做了个文件切割机和一个对图的小游戏,刚传到我的主页,大家可以下载试试
- 我被托普录用了,但我不知道他们到底怎么样?去还是不去了,我现在单位也不好,准备走人的
- 谁能给我具体的说说JNDI!100分送上
- 如何在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出错误
不知道我的理解可以吗,还望指正
你怎么搞清楚了啊
说一下啊