JAva String type伝値
一般的にprimitive typeが値を伝えると、元の値は変わらないことはよく知られています.
For example:
出力:9 and-12 3
wrapperクラスをもう一度テストします.
出力:9 and-12 3、primitive typeと同様にchangeメソッドを呼び出した後に値を変更しません.
Stringクラスをテストしても同じです.
出力:not changed and wbc、Stringはfinal classであり、javaメソッドではStringクラスの呼び出しが80%を占めるため、javaはStringクラスに対して特殊な処理を行い、String値がchangeメソッドに渡されると、コピーされたobjは新しく作成された文字列「changed」を指すが、元のobjの指向は変更されないことが理解できる.
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の指向は変更されないことが理解できる.