java参数传递

叙言.ZXF 2007-11-22 06:39:07

public class TestStringBuffer {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
method(a,b);
System.out.println(a+","+b);
}
public static void method(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}



谁解释一下答案为什么不是A,B或AB,AB?
...全文
332 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
nihuajie05 2008-03-12
  • 打赏
  • 举报
回复
...我连问题都看不懂....一会A,一会B的....
yami251139 2008-03-11
  • 打赏
  • 举报
回复
to ls
你這樣很辛苦哦。。。
power888 2008-03-11
  • 打赏
  • 举报
回复
__ __
(1) |A | |B |
~~~~ ~~~~
/ | / |
a | b |
| |
x y
__ __
(2) |AB| |B |
~~~~ ~~~~
/ | / |
a | b |
| |
x.append(y) y
__ __
(3) |AB| |B |
~~~~ ~~~~
/ | \ /
a | \ b
| \
x \------->y=x

(4) a is "AB", b is "B"
zhangbaokun 2007-12-01
  • 打赏
  • 举报
回复
参数传递都是复制一份传值
全是复制值传递
基本类型是复制值传递
抽象类型是复制地址的值传递
syhan 2007-11-30
  • 打赏
  • 举报
回复
right, java其实只有值传递
夜魔009 2007-11-28
  • 打赏
  • 举报
回复
public static void method(StringBuffer x,StringBuffer y){
这里y传进来只是引用,你改变了引用,没有用,你只是把引用y付了一个新的引用。并没有影响到引用b。b还是指向原来的引用。但是x则不通,你调用了x引用,对原对象进行了操作,改变了x和a指向的对象的内容。你还是工力不够啊。把指针和对象没有分开!
SINCE1978 2007-11-27
  • 打赏
  • 举报
回复
java参数传递只有传值的含义是:

对于基本类型则复制变量的值传递
对于抽象类型则复制一份引用传递
dracularking 2007-11-25
  • 打赏
  • 举报
回复
a,x指向同一个StringBuffer
b,y也指向同一个StringBuffer

在method方法中 x.append(y) 改变了x所指向StringBuffer的内容,
当然也就等于同时改变了a所指向StringBuffer的内容

而y=x 只是改变了y的指向,b所指向的对象并没有改变
duskwaitor 2007-11-25
  • 打赏
  • 举报
回复
public class TestStringBuffer {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
StringBuffer c[];
c=method(a,b);
a=c[0];
b=c[1];
System.out.println(a+","+b); // RESULT:AB,AB
}
public static StringBuffer[] method(StringBuffer x,StringBuffer y){
StringBuffer[] sb=new StringBuffer[2];//sb纯粹是StringBuffer的头字母缩写,呵呵
x.append(y);
y=x;
sb[0]=x;
sb[1]=y;
return sb;

}
}

叙言.ZXF 2007-11-24
  • 打赏
  • 举报
回复
这个方法要写成带返回值怎么写?
测试NULL 2007-11-23
  • 打赏
  • 举报
回复
public class TestStringBuffer {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
method(a,b);
System.out.println(a+","+b);
}
public static void method(StringBuffer x,StringBuffer y){
//x.append(y);
//y=x;

x.append("B");
y.append("A");
//y = x.append("A" + "B");
}
}

值得揣摩
ftgreat 2007-11-23
  • 打赏
  • 举报
回复
Java中参数传递只有值传递
意思是在函数体中无法改变实参与变量的对应关系
duskwaitor 2007-11-23
  • 打赏
  • 举报
回复
to 楼上:
参数传递是引用传递,如果你说值传递也可以,不过这里的值是 所传递对象的地址值
duskwaitor 2007-11-22
  • 打赏
  • 举报
回复

兄弟,我把你的程序做下修改,你自己揣摩下吧

public class TestStringBuffer {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
method(a,b);
System.out.println(a+","+b); //打印出来 AB,B
}
public static void method(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
System.out.println(x+","+y); //打印出来是 AB,AB
}
}

原因是 a,b,x,y 都是引用类型,换言之它们都是变量,它们的内容是它们指向对象的地址,在子函数中
y=x
你仅仅对y的内容做了改动,但是b的内容并没有改动,所以 会出现这样的结果。希望我讲清楚了,欢迎讨论。
idiotqingli 2007-11-22
  • 打赏
  • 举报
回复
应该是
AB,B
原因:a,b,x,y只是对象的reference(句柄)
a指向一个对象,b指向另外一个
形参x=a后x操作的就是a指向的对象
所以x.append操作的就是实际a指向的对象
但是y=x只是相当于把y现在也是指向a指向的对象而已
同时,它已经不再指向b指的对象
但是它什么都没有做,所以b未变

62,623

社区成员

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

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