このJavaコード:
public class XYZ {
public static void main(){
int toyNumber = 5;
XYZ temp = new XYZ();
temp.play(toyNumber);
System.out.println("Toy number in main " + toyNumber);
}
void play(int toyNumber){
System.out.println("Toy number in play " + toyNumber);
toyNumber++;
System.out.println("Toy number in play after increement " + toyNumber);
}
}
これを出力します:
プレイ中のおもちゃの数5 インクリメント後のおもちゃの数6 メイン5のおもちゃの数
C ++ではtoyNumber
、シャドウイングを回避するために、参照渡しとして変数を渡すことができます。つまり、以下のように同じ変数のコピーを作成します。
void main(){
int toyNumber = 5;
play(toyNumber);
cout << "Toy number in main " << toyNumber << endl;
}
void play(int &toyNumber){
cout << "Toy number in play " << toyNumber << endl;
toyNumber++;
cout << "Toy number in play after increement " << toyNumber << endl;
}
C ++の出力は次のようになります。
プレイ中のおもちゃの数5 インクリメント後のおもちゃの数6 メイン6のおもちゃの数
私の質問は-Javaが参照渡しではなく値渡しの場合、C ++コードと同じ出力を取得するJavaの同等のコードは何ですか?
toyNumber
宣言された変数がmain
メソッドのスコープ内にないため、これはシャドウイングではありませんplay
。C ++およびJavaでのシャドウイングは、スコープのネストがある場合にのみ発生します。en.wikipedia.org/wiki/Variable_shadowingを参照してください。