参数调用时的问题

wanghu2000 2006-09-18 02:29:21
在方法调用时,如果用的是传值调用的话,方法只是将定义在方法外的变量作复制,然后进行运算,变量本身不发生改变。可以下代码的BufferReplace()方法执行后,变量textBufferString的值发生了改变,请问为什么?
public class T6 {
public static void StringReplace(String text){
text=text.replace('j', 'i');
System.out.println(text);
}
public static void BufferReplace(StringBuffer text){
text=text.append("C");
}

public static void main(String[] args){
String textString=new String("java");
StringBuffer textBufferString=new StringBuffer("java");

StringReplace(textString);
BufferReplace(textBufferString);

System.out.println(textString+textBufferString);
}
}
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huliangyu 2006-09-18
  • 打赏
  • 举报
回复
String是对象哟!
huangcm 2006-09-18
  • 打赏
  • 举报
回复
java是传值调用。不能改变基本类型,可以改变对象属性,不可以改变引用
Areslp 2006-09-18
  • 打赏
  • 举报
回复
string不变的原因是运行public static void StringReplace(String text)的时候其实有两个引用指向"java"这个字符串,由于string类的不可变性,执行text=text.replace('j', 'i');的时候其实是新生成了一个string对象,并把原来指向java的引用text指向了这个新对象,但是main里的String textString=new String("java");这个textString并没有变化
lianhg 2006-09-18
  • 打赏
  • 举报
回复
String参数也是对象啊,怎么不见它也改变?

-- String 比较特殊,它是“只读”对象,String 对象是不可变

gaolch 2006-09-18
  • 打赏
  • 举报
回复
BufferReplace() 中的参数是 StringBuffer text。参数是对象,是按址传递参数。也就是可以改变参数的值。

====================
String参数也是对象啊,怎么不见它也改变?
lianhg 2006-09-18
  • 打赏
  • 举报
回复
BufferReplace() 中的参数是 StringBuffer text。参数是对象,是按址传递参数。也就是可以改变参数的值。

62,614

社区成员

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

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