在java中String,對象,Integer(包裝類型的)關於引用傳遞仍是值傳遞

場景:

     你們都知道基本的數據類型,int,float等等這種是按值傳遞的。可是對於String,對象,Integer是怎樣傳遞呢?java

原理知識:

     若是參數類型是原始類型,那麼傳過來的就是這個參數的一個副本,也就是這個原始參數的值,這個跟以前所談的傳值是同樣的。若是在函數中改變了副本的 值不會改變原始的值.函數

     若是參數類型是引用類型,那麼傳過來的就是這個引用參數的副本,這個副本存放的是參數的地址。若是在函數中沒有改變這個副本的地址,而是改變了地址中的 值,那麼在函數內的改變會影響到傳入的參數。測試

     若是在函數中改變了副本的地址,如new一個,那麼副本就指向了一個新的地址,此時傳入的參數仍是指向原來的 地址,因此不會改變參數的值。this

測試用例

輸出結果爲: spa

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-------->3code

--Integer-------->4orm

--String-------->hello對象

--StringObject-------->helloci

--Object-------->34534get

測試說明:

           String,基本類型(int等等),包裝類型(Integer等等)都是值傳遞

           實際的對象爲引用傳遞。

疑問:

       在這裏可能會有網友問了,包裝類型,String難道不是對象麼?說實話這裏我也有疑惑,可是無論怎麼樣仍是以測試結果爲準。

相關文章
相關標籤/搜索