JavaでString、オブジェクト、Integer(パッケージタイプ)リファレンス伝達か値伝達かについて
2698 ワード
シーン:
基本的なデータ型、int、floatなどは値で伝達されていることはよく知られています.しかし、String、オブジェクト、Integerはどのように伝達されますか?
原理の知識:
パラメータタイプが元のタイプである場合、伝達されるのはこのパラメータのコピー、すなわちこの元のパラメータの値であり、これは前に述べた伝達値と同じである.関数でレプリカの値を変更するも元の値は変更されない.
パラメータタイプが参照タイプである場合、この参照パラメータのコピーが渡され、このコピーにはパラメータのアドレスが格納されます.このコピーのアドレスを関数で変更せずにアドレスの値を変更した場合、関数内の変更は入力パラメータに影響します.
関数でnewのようにコピーのアドレスを変更すると、コピーは新しいアドレスを指し、このとき入力されたパラメータは元のアドレスを指すので、パラメータの値は変更されません.
テストケース
基本的なデータ型、int、floatなどは値で伝達されていることはよく知られています.しかし、String、オブジェクト、Integerはどのように伝達されますか?
原理の知識:
パラメータタイプが元のタイプである場合、伝達されるのはこのパラメータのコピー、すなわちこの元のパラメータの値であり、これは前に述べた伝達値と同じである.関数でレプリカの値を変更するも元の値は変更されない.
パラメータタイプが参照タイプである場合、この参照パラメータのコピーが渡され、このコピーにはパラメータのアドレスが格納されます.このコピーのアドレスを関数で変更せずにアドレスの値を変更した場合、関数内の変更は入力パラメータに影響します.
関数でnewのようにコピーのアドレスを変更すると、コピーは新しいアドレスを指し、このとき入力されたパラメータは元のアドレスを指すので、パラメータの値は変更されません.
テストケース
:
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class TestBasicType {
public static void methonInt(int p) {
p =10;
}
public static void methonInteger(Integer p) {
p =10;
}
public static void methonString(String p) {
p ="word";
}
public static void methonStringObject(String p) {
p ="world";
}
public static void methodObj(Person p) {
p.setId(34534);
}
public static void main(String[] args) {
int a =3;
Integer b =4;
String s ="hello";
String sobj = new String("hello");
Person p = new Person();
p.setId(12312);
TestBasicType.methodObj(p);
TestBasicType.methonInt(a);
TestBasicType.methonInteger(a);
TestBasicType.methonString(s);
System.out.println("--int-------->" + a);
System.out.println("--Integer-------->" + b);
System.out.println("--String-------->" + s);
System.out.println("--StringObject-------->" + sobj);
System.out.println("--Object-------->" + p.getId());
}
}
--
int
-------->
3
--Integer-------->
4
--String-------->hello
--StringObject-------->hello
--Object-------->
34534
:
String, (int ), (Integer )
。
:
, ,String ? , 。