java 參數傳遞(值傳遞與引用傳遞)

值傳遞與引用傳遞


1. java方法調動時到底是值傳遞還是引用傳遞

package com.zhe.yang.study;


/**
 * 參數傳遞方式(值傳遞?引用傳遞)
 * 看下面例子
 * test01對i進行了重新賦值,但是輸出i沒有變化,爲什麼,如果是值傳遞,那麼應該變爲1
 * test02是進行對象參數傳遞,輸出結果變化了,那麼這次傳遞是引用傳遞嗎?如果是引用傳遞請看test03
 * test03對兩個對象進行了互換,如果是引用傳遞,那麼這兩個對象應該會互換,但是沒有互換,爲什麼?
 * 請容二狗,不對,是小黑,往下說 
 */
public class ParamTranType {


public static void main(String[] args) {
//test01 輸出結果是10
int i=10;
change(i);
System.out.println(i);


//test02 輸出結果小黑
Man m=new Man("小紅", 23);
changeMan(m);
System.out.println(m.getName());


//test03 輸出結果是:小紅 小黑
Man m1=new Man("小紅", 23);
Man m2=new Man("小黑", 23);
exchangeMan(m1,m2);
System.out.println(m1.getName());
System.out.println(m2.getName());


}

public static void change(int i){
i=0;
}

public static void changeMan(Man m){
m.setName("小黑");
}

public static void exchangeMan(Man m1,Man m2){
Man m=new Man();
m=m1;
m1=m2;
m2=m;
}
}


class Man{
private String name;
private int age;


public Man() {
super();
}
public Man(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}


//以下是參照java核心技術券Ⅰ進行的解釋

針對test01得圖解:

在基本類型得參數進行傳遞得時候,會複製原有值,然後將複製後得值進行傳遞,所以不會改變原有值得大小



test02得解釋:

引用類型再傳遞得時候,傳遞得是“對象引用得副本”,但是副本引用和正常對象引用是引用的同一個對象,因此值回發生變化


test03的解釋:


兩個man進行傳遞得都是對象引用得副本,在方法中對副本進行交換,對原來得對象引用是沒有影響的,因此纔沒有發生互換得現象



java核心技術卷Ⅰ,139頁 上這樣說:

一個方法不能修改一個基本數據類型得參數

一個方法可以改變一個對象的狀態

一個方法不能讓對象參數引用一個新的對象










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章