值傳遞與引用傳遞
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頁 上這樣說:
一個方法不能修改一個基本數據類型得參數
一個方法可以改變一個對象的狀態
一個方法不能讓對象參數引用一個新的對象