在java中通过引用传递?
我正在尝试构建android GSM的litle gam。我有很多单位,他们都有目的地。为了计算目的地,我使用了一个名为CalDes的函数。此功能CalDes正在计算我的单位速度。所以我发送了一些变量,我必须再次编辑并使用它们。为此,我必须将这些变量与参考一起发送。这里是一个简单的C++如何在java中做到这一点?在java中通过引用传递?
void swap(SomeType& arg1, Sometype& arg2) {
SomeType temp = arg1;
arg1 = arg2;
arg2 = temp;
}
...
SomeType var1 = ...; // value "A"
SomeType var2 = ...; // value "B"
swap(var1, var2); // swaps their values!
Java根本没有传递引用。你有两个选择:
-
传递一个数组中的数据:
void swap(SomeType[] args) { SomeType temp = args[0]; args[0] = args[1]; args[1] = temp; }
...但使用它是在调用代码疼痛:
SomeType a = ...; SomeType b = ...; SomeType[] args = new SomeType[] { a, b }; swap(args); a = args[0]; b = args[1];
-
创建一个具有公共
SomeType
成员的对象,并传入对象引用。void swap(SomeTypeContainer c) { SomeType temp = c.a; c.a = c.b; c.b = temp; }
这与#1非常相似,但从调用代码使用可能更方便。
SomeTypeContainer c = new SomeTypeContainer(/* ... something that creates a and b ... */); // Use c.a and c.b directly swap(c); // Use c.a and c.b directly, they're now swapped
谢谢你的很好的解释。 – 2012-02-23 11:56:38
在Java中,每个对象总是通过引用传递。但是你不能通过引用传递变量。如果你真的需要这个,你必须使用更多的间接方法。
不完全 - 见http://*.com/questions/40480/is-java-pass-by-reference – DNA 2012-02-23 11:22:02
@DNA:嗯,这是 - 很多事情---是一个透视问题。如果我们谈论引用,那么Java就是通过价值传递的。如果我们谈论物体,它是通过参考。 Java的传球方式与大多数其他先发语言不同。您无法决定如何传递值或对象。在Java中传递一个对象是不可能的。而且你不能在Java中通过引用传递一个原始类型。这就是为什么有像java.lang.Integer这样的类型。人。而且你不能将参考传递给参考。这是OP要求的。 – jmg 2012-02-23 11:31:09
@jmg:这里的关键是“传递参考”是一个特定的术语:它意味着将参考*传递给调用上下文中的**变量**到被调用的上下文中,所以被调用的上下文可以修改调用上下文的变量的内容。与对象引用绝对没有任何关系。 Java完全是按价值传递的。 **值被传递,对于对象来说,是一个对象引用,但与通过引用没有任何关系。 – 2012-02-23 11:34:11
你是什么意思,没有办法在Java中引用?在Java中,除了本地类型(int,long,byte,boolean,double和float)之外,每个参数都通过引用传递。 – Fred 2012-02-23 11:17:27
哦,男孩。不是另一个java“按值传递/按引用传递”。除了java是传值! – Umair 2012-02-23 11:20:34
关于此主题有大量现有问题,请在发布之前进行搜索。 – DNA 2012-02-23 11:30:35