Java呼び出しメソッドパラメータ伝達の解析について

2708 ワード

この問題は多くの文章を話しましたが、ここで私が補足して、理解を深めて、足りないところがあれば教えてください.
Java開発の学生たちは、メソッドを呼び出してパラメータを渡すとき、基本クラスでも参照タイプでも、
JAvaはいずれも値伝達であり、参照伝達は存在しない(参照伝達と呼ばれ、理解しやすいが、私の次の例を見ると注意しなければならない).
まず、ここの例を見てみましょう.予想出力結果は何ですか.
public class Test4{   /**     * @param args     */    public static void main(String[] args)    {        Domain domain = new Domain();        domain.setName("test01");        System.out.println(「chengeメソッドを呼び出す前:name=」+domain.getName()                chenge(domain);                System.out.println(「chengeメソッドを呼び出した後:name=」+domain.getName()               /****************************************************/        domain.setName("www01");                System.out.println(「chenge 2メソッドを呼び出す前:name=」+domain.getName()                chenge2(domain);                System.out.println(「chenge 2メソッドを呼び出した後:name=」+domain.getName()    }        public static void chenge(Domain domain)    {        domain.setName("test02");    }        public static void chenge2(Domain domain)    {        Domain domain2 = new Domain();        domain2.setName("wwww02");        domain = domain2;    }} class Domain{    private String name;        public String getName()    {        return name;    }        public void setName(String name)    {        this.name = name;    }    }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<br>

 
実績出力:
chengeメソッドを呼び出す前:name=test 01 chengeメソッドを呼び出す後:name=test 02 chenge 2メソッドを呼び出す前:name=www 01 chenge 2メソッドを呼び出す後:name=www 01
-------------------------------------------------------------------------------------
分析:
コード内のメソッドchengeとchenge 2はいずれもアプリケーションタイプをパラメータとして適用する.
呼び出しメソッドchengeの結果はよく理解できます.呼び出しメソッドchenge 2についてはよく分析します.
なぜなら、javaでメソッドを呼び出すときのパラメータは、基本タイプでも参照タイプでも値伝達です.
値伝達とは、jdkの紹介による、本質的には、変数名のコピーがメソッドに伝達されることである.例えば、基本タイプ変数、参照タイプ変数は、メソッドに伝達する際に、
すべてこの変数のコピーです.基本タイプの値はスタック用に保存されます(実際のスタックの値は共有されています).メソッドを呼び出すと元の値には影響しません.
(1)例におけるchengeメソッド:chenge(domain);  ここで変数domainはchengeメソッドにコピーされ、このコピー変数はdomainと同じように前のオブジェクトを指します.
メソッドchengeの  domain.setName(「test 02」)文は、変数domainがコピー変数と同時にオブジェクトを指すため、実際に変更された変数が指すオブジェクトをコピーします.
変相はdomainの指向オブジェクトを修正した.
印刷結果は次のとおりです.
chengeメソッドを呼び出す前:name=test 01 chengeメソッドを呼び出す後:name=test 02
(2)(1)の解析から,chenge 2法がよく理解できる.
chenge 2メソッドは、コピー変数を別の新しいオブジェクトに指向し、元のオブジェクトに影響を及ぼさず、
印刷結果は次のとおりです.
chenge 2メソッドを呼び出す前:name=www 01 chenge 2メソッドを呼び出す後:name=www 01