2011-05-18 121 views
7

可能重复:
How to pass by reference in Java传递对象通过Java引用

是否有可能通过引用Java

喜欢传对象在C#中

public static void SomeMethod(ref Object obj) 
{ 
... 
} 
+1

我认为所有的对象都通过java隐式传递给了参数java – snoofkin 2011-05-18 12:28:03

+3

@soul Nope。一切都通过Java的价值传递,包括参考 – 2011-05-18 12:28:59

+1

这已被问了几十次。其中之一是这样的:[在Java中如何通过引用传递](http://stackoverflow.com/questions/5614562/how-to-pass-by-reference-in-java) – 2011-05-18 12:29:26

回答

19

不,就是这样在Java中不可能。

在Java中,方法的所有参数都是按值传递的。请注意,作为对象引用的非原始类型的变量也按值传递:在这种情况下,引用,传递值为。请注意,按值传递引用与传递引用不同。

+1

您可以传入一个可变引用的“持有者”对象。一个简单的实现是一个元素的ArrayList。 通常,您只需要多个输出,在这种情况下,您可以使用Pair或元组类型。 – karmakaze 2011-05-18 20:31:19

+0

@karmakaze是的,这是一种解决方法,但不可能在Java中获得真正的按值传递,就像存在于C#或C++中那样。 – Jesper 2011-05-18 20:39:29

+0

@Jesper能否详细说明通过价值引用和引用传递之间的区别?那些对我来说看起来是一样的。 – 2015-08-05 14:03:00

3

不可以。Java只是按值传递。

虽然你不应该要求这样的事情。您可以传递该对象并更改其字段 - 这将反映在调用者中。

12

对象的所有变量都是对象的引用。将对象传递给方法时,您已经传递了对象的引用。如果您不希望原始对象受到影响,则必须先克隆它。

+0

准确简洁的答案 – 2017-04-22 17:00:25

0

传递参考数据类型参数

参考数据类型参数,例如 为对象,也传递到 方法由值。这意味着当该方法返回 时,传入的 引用仍像以前一样引用相同的 对象。但是,如果对象的字段值 具有适当的 访问级别,则该方法中的值 可以更改为 。

来源:Java Tutorial>Passing Information to a Method or a Constructor

2

你必须创建一个引用类。幸运的是,有一个。尝试看看AtomicReference。请注意,它旨在用于并发,因此它可能不适合。

另一个想法是传递一个长度为1的Object数组。