當我們學會了另一門語言,就會感受到感受到另外一番世界
當我們學會了另外一門編程語言,就會感受到它給我們帶來的種種傷害!
雖然JAVA語言不會像C++一樣讓我們去操作指針
但是,每一次的new對象,都是創建一個指針
在給函數傳遞參數的時候,還是要多注意,多小心
今天,小編就給大家總結一下,JAVA參數傳遞,傳遞的到底是值還是指針?
根據數據類型的不同,JAVA的處理方式也不同
但是,要聲明一下,無論參數是什麼數據類型,JAVA中傳遞的一律是副本!
When you are passing primitives into a method, you get a distinct copy of the primitive.
When you are passing a reference into a method, you get a copy of the reference.
這是Thinking in Java 中的兩句話,大概的意思就是,如果JAVA是傳值的,那麼傳遞的就是值的副本
如果JAVA是傳遞引用的,那麼傳遞的就是引用的副本
- 對於基本數據類型,JAVA傳遞的傳遞值的副本
- 對於對象型變量,JAVA傳遞的是引用的副本
這裡需要記住!String也是對象型變量!所以也是傳遞對象型變量,不過String不可變,所以糾結傳值或者是傳引用也就無所謂了
這裡對於基本數據類型,傳值就是將自己複製一份,傳遞出去,對於對象型數據類型,傳遞就是引用副本,而不是值的副本
看到這裡你可能就有點暈了,下面看兩個例子,一下子就清晰了!
例一
先看一個基本數據類型的
從代碼中可以看出,基本數據類型boolean型的變量flag
在test()方法中改變了值,但是,這裡僅僅改變的是flag的副本,對main()方法中的flag並沒有影響
例二
現在換成對象類型
從代碼中可以看出,對象行變量在test()方法中改變了值,這裡傳遞了引用,所以對main()方法中的對象的值是有影響的
例三
如果將例二中的StringBuffer類型換成String,同樣是對象類型,你知道答案嗎?
同樣是對象類型,StringBuffer換成了String,結果就不一樣了,各位小夥伴,知道答案嗎?
今天關於JAVA是傳值還是傳引用的總結就到這裡,有什麼問題歡迎留言,小編會第一時間回覆的哦!
關於JAVA編程,程序員面試的知識,小編會持續總結,小夥伴們也可以在小編主頁的歷史文章中找到更多更有趣的知識!
最後是程序員鼓勵師哦!
閱讀更多 小六冷知識 的文章