如何在Java中使用引用?

我想在Java中使用引用,但我不知道如何! 例如在C ++中我们写道:

void sum(int& x) { ... } 

但在Java和sign中是一个编译器错误! 请帮我理解Java中的参考资料。

默认情况下通过引用传递对象通过引用 访问对象,但是无法创建对原始值(byte,short,int,long)的引用。 您必须创建一个对象来包装整数或使用单个元素数组。

 public void sum(int[] i){ i[0] = ...; } 

要么

 public void sum(MyInt i){ i.value = ...; } public class MyInt{ public int value; } 

对于你的例子,像下面的东西可以工作

 public int sum(int v){ return ...; } 

要么

 public int sum(){ return ...; } 

更新:

对象引用的附加/更好描述:

始终通过引用访问Java对象。 与原始类型一样,此引用按值传递(例如,复制)。 由于程序员可以在java中访问的所有内容都是通过复制它(引用,基元)来传递的,并且无法创建对基本类型的引用,因此对方法参数(引用,基元)的任何修改只会影响其中的本地副本。方法。 可以在方法中修改对象,因为引用的两个副本(本地和其他)仍然指向同一个对象实例。

例:

修改方法中的基元,这只影响i的内部副本而不是传递的值。

 void primitive(int i){ i = 0; } 

修改方法中的引用,这只影响ref的内部副本而不影响传递的值。

  void reference(Object ref){ ref = new Object();//points to new Object() only within this method } 

修改一个全局可见的对象

 void object(List l){ l.add(new Object());//modifies the object instead of the reference } 

上面的数组和MyInt都基于对象的修改。

普通的Java参数已经更接近于C ++引用而不是C ++传值或传递指针。 所以,你所有的Java方法都是这样的。

但是,int和其他原语在Java中是特殊的; 以上内容适用于对象引用。


编辑:更确切地说,如@fatih所述,所有Java调用都是按值传递的。 但是,当您传递一个对象时,您将按值传递引用。 因此,作为第一个近似,上述语句是正确的:普通Java参数更类似于C ++引用而不是C ++传值或传递指针。

理解Java的Pass By Value语义所需的阅读:

http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html http://javadude.com/articles/passbyvalue.htm http://javachannel.net/wiki/ pmwiki.php / FAQ / PassingVariables (链接到其他几个页面)

从头脑中完全删除Java可以通过引用传递任何内容的概念。 让我们看一个例子,好吗?

 public class App { public static void main( String[] args ) { Foo f1 = new Foo(); doSomethingToFoo(f1); System.out.println(f1.bar); //Hey guess what, f1.bar is still 0 because JAVA IS PASS BY VALUE!!! } static void doSomethingToFoo(Foo f) { f = new Foo(); f.bar = 99; } static class Foo { int bar = 0; } }