關於java傳值的一點小細節:java語言中對象傳遞地址,而不是引用。 例如:假設對象Test有name的屬性。 public void call(Test){ Test t2 = new Test(); t2.setName("cba"); t.setName("abc"); t=12; } pu ...
關於java傳值的一點小細節:java語言中對象傳遞地址,而不是引用。
例如:假設對象Test有name的屬性。
public void call(Test){
Test t2 = new Test();
t2.setName("cba");
t.setName("abc");
t=12;
}
public static void main(String[] arg){
Test obj = new Test();
call(obj);
System.out.println("obj"+obj.get(Name));
}
輸出結果是abc,而不是cba,原因:在兩個聲明變數obj,t中,它們指向同一個地址,調用call方法,只是將obj指向的地址傳遞給了t,而obj本身並沒有傳遞過去(也就是沒有傳遞引用),當你重新賦值的時候(也就是將對象引用指向其他儲存空間),等於隻影響了t,而沒有影響obj。
(==引用自csdn faintbear)
這句話翻譯的挺好的:
局部變數必須在所有導致使用它的路徑上被顯式初始化。
舉例:局部變數public class order {
public double call (double quantity){
double x;
if(quantity>=0){
x=quantity;
} return x;
}
}
java程式會報錯,就是因為quantity《0時會返回x,但是局部變數x是不會被預設值為0.0的,所以返回的x屬於未初始化狀態,因此報錯。