如何通过值将可变对象传递给java

时间:2010-12-06 11:22:09

标签: java

有没有办法可以通过值将可变对象传递给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

4 个答案:

答案 0 :(得分:4)

在Java中根本不传递对象本身。如初。

所有都是按值传递的 - 其中唯一可以传递的是原始值和引用。

目前还不是很清楚你想要做什么 - 你想要一个带有(例如)StringBuilder参数的方法的想法,但是没有对该对象进行任何更改调用方可见的方法?如果是这样,你基本上需要自己克隆对象。

答案 1 :(得分:2)

不幸的是,没有。 Java 从不按值传递对象,它按值传递对象的引用

来自here的解释:

  

真正发生的是   对象始终通过引用保存   在java中 - 从不通过值 - 和   实际上,参考文献正在通过   按价值。

答案 2 :(得分:1)

你为什么需要这样做?如果你不改变对象,那就没关系了。如果您确实更改了对象,并且不想影响调用者的对象,那么只需在本地制作副本。但我猜想至少90%的人认为他们需要这样做,他们真的没有。

显示一些代码。你真的试图做什么?

答案 3 :(得分:-2)

AFAIK immutable / mutable与传递值/引用无关。字符串通过引用传递,而不是值。字符串不可变的原因是字符串类本身的设计。 也许你可以解释一下你要找的东西。