求解

hanluner 2010-04-14 02:30:23
解决两个问题:(说明运行结果的原因)
1:public class Foo {


public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b= new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);


}
static void operate(StringBuffer x ,StringBuffer y){
x.append(y);
y = x;
}


}



2:public class Test1 {

public static void add(Integer i){
int val = i.intValue();
val +=3;
i = new Integer(val);

}
public static void main(String[] args) {
Integer i = new Integer(0);
add(i);
System.out.println(i.intValue());

}

}
...全文
110 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanluner 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pomelover 的回复:]

第二个问题和第一个问题同解。
第一个问题:生成了a,b两个StringBuffer对象,然后传入operate方法中,在这个方法中传过来的是引用,也就是x指向a,y指向b,然后x.append(y)操作把a连接上b,y=x操作只是改变了y的引用,也就是让他指向a,并没有改变b对象。
[/Quote]你说的还是有点道理 不过事实上从简单方面来讲,这是个传值方式,而不是传引用方式,传值方式不改变变量的值,传引用改变变量的值。这也就是为什么出现那样的输出结果了。
yugong2009 2010-04-15
  • 打赏
  • 举报
回复
Thinking in java 中有写到:在许多编程语言中,方法似乎要在它的作用域内复制其参数的一个副本
这就是问题的关键!

问题1: AB,B
参数是对象 ,副本和母本的值相同,指向了同一个对象,所以对副本指向的对象的操作会改变母本指向的对象的属性,所以x.append(y)会改变副本所指的对象的属性,而y=x只是修改副本的值,实参所指的对象的属性没有变化

问题2: 0
i= new Integer(val); 关键也在此,理由同上
VirusFu 2010-04-14
  • 打赏
  • 举报
回复
引用传递
James.Ji 2010-04-14
  • 打赏
  • 举报
回复
第二个问题和第一个问题同解。
第一个问题:生成了a,b两个StringBuffer对象,然后传入operate方法中,在这个方法中传过来的是引用,也就是x指向a,y指向b,然后x.append(y)操作把a连接上b,y=x操作只是改变了y的引用,也就是让他指向a,并没有改变b对象。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧