有没有办法可以通过值将可变对象传递给java中的函数?
我真正想要的是将一个对象传递给一个方法,对它进行一些操作(更改它)并再次用该旧对象调用该方法(而不是更改的值)。
这里有一些样本:
{ MyObj obj = new MyObj(); obj.setName("name");
append(obj);
System.out.println(obj.name);
prepend(obj);
System.out.println(obj.name);
}
void append(MyObj obj){ obj.name+="1"; }
void prepend(MyObj obj){ String a = "1"; obj.name=a+obj.name; }
在此代码的末尾,我希望输出为:
name1
1name
答案 0 :(得分:4)
在Java中根本不传递对象本身。如初。
但所有都是按值传递的 - 其中唯一可以传递的是原始值和引用。
目前还不是很清楚你想要做什么 - 你想要一个带有(例如)StringBuilder
参数的方法的想法,但是没有对该对象进行任何更改调用方可见的方法?如果是这样,你基本上需要自己克隆对象。
答案 1 :(得分:2)
不幸的是,没有。 Java 从不按值传递对象,它按值传递对象的引用。
来自here的解释:
真正发生的是 对象始终通过引用保存 在java中 - 从不通过值 - 和 实际上,参考文献正在通过 按价值。
答案 2 :(得分:1)
你为什么需要这样做?如果你不改变对象,那就没关系了。如果您确实更改了对象,并且不想影响调用者的对象,那么只需在本地制作副本。但我猜想至少90%的人认为他们需要这样做,他们真的没有。
显示一些代码。你真的试图做什么?
答案 3 :(得分:-2)
AFAIK immutable / mutable与传递值/引用无关。字符串通过引用传递,而不是值。字符串不可变的原因是字符串类本身的设计。 也许你可以解释一下你要找的东西。