1. ホーム
  2. java

[解決済み] Javaで参照を使用するには?

2022-03-10 10:53:29

質問

Javaで参照を使いたいのですが、やり方がわかりません。 例えば、C++ではこう書きます。

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

が、Javaの&記号はコンパイラのエラーになります。 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は、いずれもオブジェクトの変更に基づくものです。