JavaでString、オブジェクト、Integer(パッケージタイプ)リファレンス伝達か値伝達かについて

2698 ワード

シーン:
基本的なデータ型、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 ? , 。