传参数问题,大家讨论一下

dengbg 2005-03-12 09:40:05
import static java.lang.System.out;

public class Test {
/**
* @param args
*/
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a,b);
out.println(a);
out.println(b);
}

private static void operate(StringBuffer x, StringBuffer y) {
x.append("A");
y = x;
y.append("CC");
}
}


上类执行结果是:
AACC
B

为什么不是"AACC,AACC"之类的?
...全文
164 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Hodex 2005-03-14
a是引用,在栈中(基本类型也在栈中),而传值是指传栈中的值
"A"是对象,在堆中,不会动的 :-)
  • 打赏
  • 举报
回复
zhang21cnboy 2005-03-14
哈哈,又多学了一招!
  • 打赏
  • 举报
回复
fuwang 2005-03-14
jFresH_MaN说得很明白,解决了我一个困惑
  • 打赏
  • 举报
回复
jstars 2005-03-13
StringBuffer是有缓冲的,所以B不会消除,把缓冲清除
  • 打赏
  • 举报
回复
bearimh 2005-03-13
那想达到本来的目的怎么做呢?过路菜鸟^^
  • 打赏
  • 举报
回复
silverend 2005-03-13
JAVA中对象在堆中的引用问题经常碰到
  • 打赏
  • 举报
回复
jFresH_MaN 2005-03-13
在java里面可以叫做句柄,类似C++里面的指针,他们只是引用实例对象
  • 打赏
  • 举报
回复
dengbg 2005-03-13
jFresH_MaN(The answer is ......)(静下心来研究Tiger)和Hodex(小何才露尖尖角) 两位老兄说的有道理。那这样也是说a与x,b与y是两对不同的对象了,只是他们都分别指向同一个对象而已了
  • 打赏
  • 举报
回复
Hodex 2005-03-12

x.append("A");//a->AA
y = x;//y改引用AA,即y已不引用B(即b的值)
y.append("CC");//a->AACC
  • 打赏
  • 举报
回复
jFresH_MaN 2005-03-12
首先java中的对象都是引用传参,说白了就是指针

x.append("A");
y = x;
y.append("CC");
这段代码中x的值应该都明白吧
主要是y,方法体一开始y是b的引用
y=x的赋值使y引用变成了和x一样,也就是说y也引用了a,下面对y的改变就是对a的改变
而b的引用在方法体中被y丢了,所以不再改变b了
  • 打赏
  • 举报
回复
softbugg 2005-03-12
因为operate中没有对b进行操作,所以b没有变化
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
帖子事件
创建了帖子
2005-03-12 09:40
社区公告
暂无公告