[英]How to use references in 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;
}
}
Apache Commons中的MutableInt
類可以做你想要的,盡管它並不漂亮。
void sum(MutableInt mx)
{
int x = mx.getValue();
x = ...
mx.setValue(x);
}
...
MutableInt mx = new MutableInt(5);
sum(mx);
int result = mx.getValue();
為其他基本類型以及對象提供了附加類。
創建一個額外的對象只是為了提供一個引用而涉及一些開銷,因此解決方案不是最佳的,但在大多數情況下你應該沒問題。
通常,最好找到一種從方法返回結果的方法。 不幸的是,Java只允許以這種方式返回一個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.