如果修改方法参数所指向的值

zjwilove4 2010-03-17 03:48:21
例如:
public void test1(String arg1){
//如何才能修改arg1这个引用所指向的值呢?想了半天不得解啊。。。
}
...全文
138 21 打赏 收藏 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjh811 2010-03-17
  • 打赏
  • 举报
回复
要改的话,用StringBuffer咯,不然人家为什么要提供这个StringBuffer
zjwilove4 2010-03-17
  • 打赏
  • 举报
回复
哎 翻阅了相关文档这个问题无法解决

谢谢大家了
j_tang 2010-03-17
  • 打赏
  • 举报
回复

方法形参的问题也困扰过我一段时间 :)
zjwilove4 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 j_tang 的回复:]

引用 15 楼 zjwilove4 的回复:

哎 关键还就是String类型。。。
不是基本类型也不是自定义类型

悲愤

呵呵 String对象貌似是不能更改的啊
记得有个字符串池的概念啊 敢问这样做的深层次原因么
[/Quote]
谢谢提醒 我搞搞去
j_tang 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zjwilove4 的回复:]

哎 关键还就是String类型。。。
不是基本类型也不是自定义类型

悲愤
[/Quote]
呵呵 String对象貌似是不能更改的啊
记得有个字符串池的概念啊 敢问这样做的深层次原因么
j_tang 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xiesisi3 的回复:]

引用 13 楼 j_tang 的回复:
public void test1(Demo arg){
arg.setValue(99);// 这样就改变arg这个对象中的值了
}

class Demo {
int i = 0;
public void setValue(int value){
this.i = value;
}

排版比较乱, 直接在论坛上敲的, 不知道是否是……
[/Quote]

糊涂了, 改变引用本身 不大明白这个意思
如果是改变 arg的引用的话
直接 arg = new Demo(); 就好了啊
zjwilove4 2010-03-17
  • 打赏
  • 举报
回复
哎 关键还就是String类型。。。
不是基本类型也不是自定义类型

悲愤
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 j_tang 的回复:]
public void test1(Demo arg){
arg.setValue(99);// 这样就改变arg这个对象中的值了
}

class Demo {
int i = 0;
public void setValue(int value){
this.i = value;
}

排版比较乱, 直接在论坛上敲的, 不知道是否是lz想要的效果
[/Quote]

LZ是要改变引用本身,不是要改变引用指向的值
j_tang 2010-03-17
  • 打赏
  • 举报
回复
public void test1(Demo arg){
arg.setValue(99);// 这样就改变arg这个对象中的值了
}

class Demo {
int i = 0;
public void setValue(int value){
this.i = value;
}

排版比较乱, 直接在论坛上敲的, 不知道是否是lz想要的效果
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zjwilove4 的回复:]
public static void main(String[] args){
String arg = "0";//arg最开始指向的是 "0"这个内存地址。
new Test().test1(arg);//调用方法时把arg这个引用复制了一份传递给了方法
System.out.println(arg);//实际上还是打印的0
}
public void test1(String ar……
[/Quote]

那是不可能的,因为对于方法内部来说,它根本不需要知道有那样一个引用arg存在,它只知道传进来的这个引用。

如果一定要改,那么只有把arg作为类变量,那么你在哪里改都可以
j_tang 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zjwilove4 的回复:]

public static void main(String[] args){
String arg = "0";//arg最开始指向的是 "0"这个内存地址。
new Test().test1(arg);//调用方法时把arg这个引用复制了一份传递给了方法
System.out.println(arg);//实际上还是打印的0
}
public void test1(String a……
[/Quote]

如果把String类型,换成其他的对象类型是可以的
比如 arg对象可以通过访问自己的方法,来改变自己对象中的字段
zjwilove4 2010-03-17
  • 打赏
  • 举报
回复
public static void main(String[] args){
String arg = "0";//arg最开始指向的是 "0"这个内存地址。
new Test().test1(arg);//调用方法时把arg这个引用复制了一份传递给了方法
System.out.println(arg);//实际上还是打印的0
}
public void test1(String arg){
arg = "1";在方法中arg = "1" 把这个复制的引用重新指向了 "1"这个内存地址
}


我的问题是:能不能有什么办法在方法中改变 arg所指向的 值?
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
这个不同于c,c里面传值修改是没有用的,但java里面因为是一份资源的两个引用,所以任何一个修改都可以改掉这同一份资源。但是引用本身互相之间不能产生作用,因为它们甚至都不知道对方的存在。
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
你有没有看内容?
结果是修改了好不好。。为什么会变成10,就是因为已经修改了。
zjwilove4 2010-03-17
  • 打赏
  • 举报
回复
这个我知道。关键是能不能修改?
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
。。。
刚刚还有人问这个问题来着。。

http://topic.csdn.net/u/20100317/11/dec632aa-5e60-41aa-8942-4878630131ca.html
你看我在四楼的回复就明白了
zjwilove4 2010-03-17
  • 打赏
  • 举报
回复
说明白点就是修改p1这个引用所指向的内存地址当中的值
而不是修改p1这个引用所指向的内存地址
zjwilove4 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiesisi3 的回复:]

什么意思?能具体点吗?
你是说

test1(p);

public void test1(String p1) {
p1 = ...
}
[/Quote]
如果是这样修改的话 修改的是p1这个引用
我的意思是修改参数p1这个引用所指向的值
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
什么意思?能具体点吗?
你是说

test1(p);

public void test1(String p1) {
p1 = ...
}
然后你想修改什么呢?
加载更多回复(1)

62,620

社区成员

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

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