JAva String type伝値


一般的にprimitive typeが値を伝えると、元の値は変わらないことはよく知られています.
For example:
public class TestPrimitiveType {
	int original = 9;
	
    int[] arr = {1, 2, 3};   
  
    public static void main(String args[]) {
    	TestPrimitiveType ti = new TestPrimitiveType();   
        ti.change(ti.original, ti.arr);   
        System.out.print(ti.original + " and ");   
        System.out.println(ti.arr[0] + " " + ti.arr[1] + " " + ti.arr[2]);   
    }   
  
    public void change(int original, int[] arr) {
        original = 100;
        arr[0] = -1;
    }
}

出力:9 and-12 3
wrapperクラスをもう一度テストします.
public class TestInteger {
	Integer obj = new Integer(9);   
	  
    Integer[] arr = {1, 2, 3};   
  
    public static void main(String args[]) {
    	TestInteger ti = new TestInteger();   
        ti.change(ti.obj, ti.arr);   
        System.out.print(ti.obj + " and ");   
        System.out.println(ti.arr[0] + " " + ti.arr[1] + " " + ti.arr[2]);   
    }   
  
    public void change(Integer obj, Integer[] arr) {   
        obj = 100;   
        arr[0] = -1;
    }
}

出力:9 and-12 3、primitive typeと同様にchangeメソッドを呼び出した後に値を変更しません.
Stringクラスをテストしても同じです.
public class TestString {
	String obj = new String("not changed");   
	  
    char[] arr = {'a', 'b', 'c'};   
  
    public static void main(String args[]) {   
    	TestString ts = new TestString();   
        ts.change(ts.obj, ts.arr);   
        System.out.print(ts.obj + " and ");   
        System.out.println(ts.arr);   
    }   
  
    public void change(String obj, char[] arr) {   
        obj = "changed";
        arr[0] = 'w';
    }
}

出力:not changed and wbc、Stringはfinal classであり、javaメソッドではStringクラスの呼び出しが80%を占めるため、javaはStringクラスに対して特殊な処理を行い、String値がchangeメソッドに渡されると、コピーされたobjは新しく作成された文字列「changed」を指すが、元のobjの指向は変更されないことが理解できる.