ホームページ >Java >&#&チュートリアル >Java での値渡しと参照渡しの違いの分析 (コード付き)

Java での値渡しと参照渡しの違いの分析 (コード付き)

不言
不言オリジナル
2018-08-21 14:15:062012ブラウズ

この記事では、Java における値の受け渡しと参照の受け渡し (アドレスの受け渡し) の違いについて説明します (コード付き)。必要な方は参考にしていただければ幸いです。役立ちます。

値渡し (値渡し) とは、関数呼び出し時に実際のパラメータをコピーして関数に渡すことを意味します。これにより、関数内でパラメータが変更された場合に、それらが変更されます。実際のパラメータには影響しません。転送されるオブジェクトは、多くの場合、整数浮動小数点文字型などの基本的なデータ構造です。

public class PassByValueReference {
	//值传递
	public static void main(String[] args) {
		int x = 9;
		pass(x);
		System.out.println(x);
	}
	
	private static void pass(int y) {
		System.out.println(y);
		y=0;
	}
}
以下は実行結果です: (整数 y の値の変更は整数 x の値に影響しません)

参照渡し

(参照渡し) は渡すことを指します関数呼び出し時の実際のパラメータ アドレス が関数に直接渡されるため、関数内のパラメータの変更は実際のパラメータに影響します。 (コミュニティに似ています) 転送されるオブジェクトは配列などのアドレスデータ構造であることが多いです。

public class PassByValueReference {
        //引用传递
	public static void main(String[] args) {
		int [] x = {9};
                System.out.println(x[0]);
		pass(x);
		System.out.println(x[0]);
	}
	
	public static void pass(int [] y) {
		y[0] = 0;
	}
}
以下は実行結果です: (配列 y の値の変更は配列 x の値にも影響します)

(値の転送と参照の転送は、コンピューターのデータ構造におけるスタックとヒープの知識を使用します)

さらに、Java の関数やメソッドの知識がまだない場合は、代入を使用するだけで理解できます: (演算結果は上記と同様です)

public class PassByValueReference {
	//值传递(赋值非函方式)
	public static void main(String[] args) {
	    int x = 9;
            System.out.println(x);
	    y = x;
            y = 10;
	    System.out.println(x);
	}
}

ここで、x と y は基本的なデータ型を割り当てた後、x の値が y に渡されます。これは、x 全体 (つまり、x アドレス) を y に渡すのではなく、コピーを作成することと同じです。

public class PassByValueReference {
        //引用传递(赋值非函方式)
        public static void main(String[] args) {
		int [] x = {1};
		System.out.println(x[0]);
		int [] y = x;
		y[0] = 0;
		System.out.println(x[0]);
	}
}

ここで、x と y は配列です。今回のコードは単に x[0]=y[0] を設定するのではなく、x=y を直接設定します。これは等価です。 y[0] が変化すると、x[0] も変化します。

関連する推奨事項:

Javaの値の受け渡しと参照の受け渡しについて詳しく説明します


Javaソフトウェアエンジニアが学ぶphp-13

以上がJava での値渡しと参照渡しの違いの分析 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。