最近在做項目時碰到關于java值傳遞和引用傳遞的問題,查不了少文章,做了幾個例子才搞明白,當然我總結出來的不一定是對的,歡迎大家來拍磚。主要有以下兩條:
1.如果是基本類型,那么傳遞進去的就是值傳遞。
2.如果不是基本類型,那么傳遞進去的就是對象引用的拷貝。
以下是例子:
public class Test {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test1 {
private static Test staticTest;
public static void main(String[] args) {
Test t1 = new Test();
call(t1);
System.out.println(t1.getName());
}
public static void call(Test rt) {
staticTest = new Test();
staticTest.setName("abc");
rt.setName("cba");
rt = staticTest;
}
}
此時的運行結果是什么?機器給出的結果是“cba”,為什么會這樣,我理解如下:
rt.setName("cba");
此時rt是t1的一個復制,但是又不代表t1,但是rt和t1都指向同一個對象,無論通過rt還是t1來都會改變所引用對象的值。
rt = staticTest;
這時會把staticTest的引用賦給rt,但是rt只是t1的一個引用, rt此時指向staticTest,但是不會更改t1的值。
所以會發(fā)生以上的結果。不知道正確與否?
posted on 2008-09-05 14:48
星光 閱讀(247)
評論(2) 編輯 收藏