javaパラメータ転送

1688 ワード


レスアドレス:http://www.iteye.com/topic/12961#75177
 
すべてのパラメータ伝達は値を伝えています。この事実を引用したことはありません。 すべてのパラメータ転送はプログラムの運転スタックに新しい値のレプリカを割り当てます。 最初のセクションの主なコードです。 
 
public static void test(Pass passA); {   
          passA.a="abc";   
}   
 
 
このパスのPassAのアドレス値。このアドレス値はコピーされました。 信じません。書いてください 
 
public static void test(Pass passA); {   
passA = null;  
} 
 
見てください。passAにはどんな影響がありますか? なんの役にも立たない。関数が呼び出されたら、passAは元の値です。Nullにはなりません。 しかし、あなたのコードはpassAを操作しました。  passA.aは、passAのメンバー変数を変更しました。 このメンバー変数はStringのアドレスを実際に指しています。もちろん変更できます。 これは操作です  との違い。 これはメンバー変数aに対する割当値です。本当にメンバー変数aの値を変更しました。 ここで渡すパラメータは、aではなくpassAです。 だから、passAはコピーされました。passAのこのコピーのa変数はまた元のpassAのa変数を指します。 
public static void test(StringBuffer str) { 
str.append("World"); 
} 
 
 
パラメータの割り当てだけがパラメータの動作に影響を与えません。 
 
public static void test(StringBuffer str) { 
str.append("World"); 
}  
パラメータを操作したら、当然影響があります。 
 
	public static void main( String[] args ){
	
		String str = "one";
		
		helo(str);
		
		System.out.println(str);
		
		int n = 1;
		
		helo1(n);
		
		System.out.println(n);
	}
	
	public static void helo( String str ){
		str = "two";
	}
	
	public static void helo1(int n){
		n=2;
	}
 
出力:
one
1