1. 程式人生 > >java中函數傳值與引用問題

java中函數傳值與引用問題

輸出 set 驗證 臨時對象 輸出結果 引用 chan sta 賦值運算

從C++轉java,在使用函數傳對象時,碰到一點問題,今天特意驗證了一下:

public class App 
{
    public static void doubleTest(double d) {
        d=8.0;
        System.out.println( "[INNER doubleTest]double:"+d);
    }
    public static void DoubleTest(Double dd) {
        dd=8.0;
        System.out.println( "[INNER DoubleTest]Double:"+dd);
    }
    
public static void ObjectTest(ObjectChange obj) { obj = new ObjectChange(5); System.out.println( "[INNER ObjectTest]Object:"+obj.getTT()); obj.setTT(8); System.out.println( "[INNER ObjectTest]Object:"+obj.getTT()); } public static void ObjectChangeTest(ObjectChange obj) { obj.setTT(
8); System.out.println( "[INNER ObjectChangeTest]Object:"+obj.getTT()); obj = new ObjectChange(5); System.out.println( "[INNER ObjectChangeTest]Object:"+obj.getTT()); obj.setTT(6); System.out.println( "[INNER ObjectChangeTest]Object:"+obj.getTT()); }
public static void main( String[] args ) { System.out.println( "Source:" ); double d1=1; Double d2=2.0; ObjectChange obj1 = new ObjectChange(1); System.out.println( "double:"+d1+" Double:"+d2 +" Object:"+ obj1.getTT()); System.out.println( "After:" ); doubleTest(d1); DoubleTest(d2); ObjectTest(obj1); System.out.println( "double:"+d1+" Double:"+d2 +" Object:"+ obj1.getTT()); ObjectChangeTest(obj1); System.out.println( "Object:"+ obj1.getTT()); } }

程序輸出結果:

技術分享圖片

總結:

obj在函數體內作為臨時變量,可讀取對象內容,采用“=”(賦值運算符)改變的是臨時對象的內容,賦值後,再操作的也是臨時對象的內容;

只有在賦值前調用對象的成員方法(setTT())才能真正改變obj對象的內容;

java中函數傳值與引用問題