值傳遞和引用傳遞的區別

值傳遞: 只要是基本類型傳遞 都是值傳遞

引用傳遞:針對於基本類型進行封裝,對封裝進行傳遞,是引用傳遞

代碼:值傳遞(int類型)

 public class Test {
    public static void main(String[] args) {

        int int1 = 10;

        int int2 = int1;
        System.out.println("int1==" + int1);
        System.out.println("int2==" + int2);

        int2 = 20;
        System.out.println("改變之後");
        System.out.println("int1==" + int1);
        System.out.println("int2==" + int2);
	}
}

運行代碼:得到的當前的結果如下

int1==10
int2==10
改變之後
int1==10
int2==20

Process finished with exit code 0

根據結果會發現int類型的傳遞,當int2值改變的時候,int1的值是沒有任何變化的,所以基本類型都是根據它的值去傳遞的,傳遞之後,int2的值得改變和int1的值已經沒有任何關係了

String類型的傳遞

代碼:

 	    String str1 = "str1";

        String str2 = str1;
        System.out.println("str1==" + str1);
        System.out.println("str2==" + str2);

        str2 = "str2";
        System.out.println("改變之後");
        System.out.println("str1==" + str1);
        System.out.println("str2==" + str2);

結果:

str1==str1
str2==str1
改變之後
str1==str1
str2==str2

Process finished with exit code 0

結果證明String的結果 和int的結果是一樣的,但是表達的方式不一樣, String的表達方式和Integer是一樣的,都是重新new的方式去傳遞值的。
String str2 = str1; 這句話可以理解爲 String str2 = new String(str1); 把str1當做參數傳遞過去,重新new了一個新的String,所以str2的值和str1的值 雖然是一樣的,但是str2 和str1卻不是同一個String

類傳遞(引用傳遞)

代碼: 創建了一個TestDemo的類 ,裏面有一個String類型的變量 txtProtected

 	 	TestDemo testDemo1 = new TestDemo();
        testDemo1.setTxtProtected("potected");

        TestDemo testDemo2 = testDemo1;

        TestDemo testDemo3 = new TestDemo();
        testDemo3.setTxtProtected(testDemo1.getTxtProtected());
        System.out.println("testDemo1==" + testDemo1.getTxtProtected());
        System.out.println("testDemo2==" + testDemo2.getTxtProtected());
        System.out.println("testDemo3==" + testDemo3.getTxtProtected());

        testDemo2.setTxtProtected("testDemo2");
        System.out.println("改變之後");
        System.out.println("testDemo1==" + testDemo1.getTxtProtected());
        System.out.println("testDemo2==" + testDemo2.getTxtProtected());
        System.out.println("testDemo3==" + testDemo3.getTxtProtected());

運行代碼的結果:

testDemo1==potected
testDemo2==potected
testDemo3==potected
改變之後
testDemo1==testDemo2
testDemo2==testDemo2
testDemo3==potected

Process finished with exit code 0

從結果可看出 test2 和test1 是一樣的結果,但是test3和 test1(test2)的結果並不是一樣的
那麼test2這個類的指針所指向的地方 是和test1 所指向的地方 是一個 ,所以test2的 txtProtected 會導致 test1
的txtProtected 的值發生改變。
test3和 test1的值卻是不一樣的,其實test3的方式 和上面String的方式 是一樣的,都是通過new的方式創建出來的,所以就不敘述了。

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