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