ホームページ >类库下载 >java类库 >Javaメソッドのパラメータを渡す2つの方法

Javaメソッドのパラメータを渡す2つの方法

little bottle
little bottle転載
2019-04-08 13:43:206316ブラウズ

#Java でメソッド パラメータを渡すには、値渡しと参照渡しの 2 つの方法があります。

1. 値渡し

パラメータの型が int、long などの基本データ型 (基本データ型 8 種類) の場合、処理パラメータの受け渡し 値コピー メソッドの使用

#コード スニペット 1:

public class Test {

    public static void main(String[] args) {
        int a = 5;
        fun(a);
        System.out.println(a);// 输出结果为5
    }

    private static void fun(int a) {
        a += 1;
    }
}

#2. 参照渡し

パラメータの型は参照型であり、パラメータの転送処理はコピー参照方式を採用しています


コード スニペット 2:

public class Test {

    public static void main(String[] args) {
        A a = new A(5);
        fun(a);
        System.out.println(a.a);// 输出结果为6
    }

    private static void fun(A a) {
        a.a += 1;
    }

    static class A {
        public int a;

        public A(int a) {
            this.a = a;
        }
    }
}

#結論: 値渡しでは元の値は変更されませんが、参照渡しでは参照先オブジェクトの値が変更されます #次の状況を見てください:

コード スニペット 3:

public class Test {

    public static void main(String[] args) {
        Integer a = 5;
        fun(a);
        System.out.println(a);// 输出结果为5
    }

    private static void fun(Integer a) {
        a += 1;
    }

}
これは明らかに参照転送ですが、オブジェクトの値が変更されないのはなぜですか?

基本データ型カプセル化クラスのオートボクシング機能を実際に使用します。

Integer a = 5、コンパイル後は実際には Integer a = Integer.valueOf(5) になります。Integer のソース コードを見ると、元のオブジェクトの値は変更されず、その参照をポイントしているだけです。別のオブジェクトに。

##コード スニペット 3 のプロセスは、次の図で表すことができます。

## スタック フレームを直接変更する アドレス別のオブジェクトを指すため、元の値は変更されません。

【おすすめコース:

Java ビデオチュートリアル

以上がJavaメソッドのパラメータを渡す2つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。