JAvaにおける関数のパラメータ伝達の詳細


まとめ:
  1.オブジェクト(オブジェクトの参照)をパラメータとして渡すときに渡されるのは、参照(ポインタに相当)です.すなわち,関数内のパラメータに対する修正は元のオブジェクトに影響を及ぼす.
  2.基本タイプまたは基本タイプのパッケージセットをパラメータとして渡すと、値が渡されます.すなわち,関数内のパラメータに対する修正は元の変数に影響を及ぼさない.
  3.配列(配列参照))は、パラメータとして渡されるときに渡される参照(ポインタに相当)です.すなわち,関数内のパラメータに対する修正は元の配列に影響を及ぼす.
  4.Stringタイプ(参照)はパラメータとして渡されるときに渡される参照ですが、Stringを変更すると新しいStringオブジェクトが生成され、元のStringオブジェクトの値は変更されません.(しかし、新しいオブジェクトの参照を元の参照に割り当てることができ、このように人に与える表面現象は元のオブジェクトが変わったが、実際には変わっていないが、元の参照が新しいオブジェクトを指しているだけだ).
package StringTest;

class A{
	int a=1;
	char b='A';
	public A(){}
	public A(int _a,char _b){
		this.a=_a;
		this.b=_b;
	}
	public String toString(){
		return "a="+this.a+",b="+this.b;
	}
}


public class ReferenceTest {
    public static A changeA(A classa){
    	classa.a=2;
    	classa.b='B';
    	return classa;
    }
    
    public static String changeString(String str){
    	 System.out.println(str.hashCode());
    	 str=str.toLowerCase();
    	 System.out.println(str.hashCode());
    	 return str;
    }
    
    public static int changeint(int a){
    	a=a+1;
    	return a;
    }
    
    public static Integer changeInteger(Integer a){
    	a=new Integer(9);
    	return a;
    }
    
    public static int[] changeintarray(int a[]){
    	a[0]=10;
    	return a;
    }
    
    public static void printArray(int a[]){
    	for(int i=0;i<a.length;i++){
    		System.out.print(a[i]+" ");
    	}
    	System.out.println();
    }
    
	public static void main(String[] args) {
	   //            
	   A a=new A();
	   A b=changeA(a);
	   System.out.println(a);
	   System.out.println(b); 
	   System.out.println("----------------------");
	   //String             (  String       ,     String              String           ,       )
	   String str1="HUHUALIANG";
	   System.out.println(str1.hashCode());
	   String str2=changeString(str1);
	   System.out.println(str2.hashCode());
	   System.out.println(str1);
	   System.out.println(str2); 
	   System.out.println("----------------------");
	   //        
	   int inta=8;
	   int intb=changeint(inta);
	   System.out.println(inta);
	   System.out.println(intb); 
	   System.out.println("----------------------");
	   //                      
	   Integer c=new Integer(1);
	   Integer d=changeInteger(c);
	   System.out.println(c);
	   System.out.println(d); 
	   System.out.println("----------------------");
	   //        
	   int [] arraya={0,1,2,3};
	   int [] arrayb=changeintarray(arraya);
	   printArray(arraya);
	   printArray(arrayb);
	}
}
実行結果:
a=2,b=B a=2,b=B ---------------------- 711139030 711139030 226046678 226046678 HUHUALIANG huhualiang ---------------------- 8 9 ---------------------- 1 9 ---------------------- 10 1 2 3  10 1 2 3