傳值?傳引用?究竟是何種方式?JAVA編程思想卻說都不是!

當我們學會了另一門語言,就會感受到感受到另外一番世界

當我們學會了另外一門編程語言,就會感受到它給我們帶來的種種傷害!

雖然JAVA語言不會像C++一樣讓我們去操作指針

但是,每一次的new對象,都是創建一個指針

在給函數傳遞參數的時候,還是要多注意,多小心

今天,小編就給大家總結一下,JAVA參數傳遞,傳遞的到底是值還是指針?

根據數據類型的不同,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不可變,所以糾結傳值或者是傳引用也就無所謂了

這裡對於基本數據類型,傳值就是將自己複製一份,傳遞出去,對於對象型數據類型,傳遞就是引用副本,而不是值的副本

看到這裡你可能就有點暈了,下面看兩個例子,一下子就清晰了!

傳值?傳引用?究竟是何種方式?JAVA編程思想卻說都不是!

例一

先看一個基本數據類型的

傳值?傳引用?究竟是何種方式?JAVA編程思想卻說都不是!

從代碼中可以看出,基本數據類型boolean型的變量flag

在test()方法中改變了值,但是,這裡僅僅改變的是flag的副本,對main()方法中的flag並沒有影響

例二

現在換成對象類型

傳值?傳引用?究竟是何種方式?JAVA編程思想卻說都不是!

從代碼中可以看出,對象行變量在test()方法中改變了值,這裡傳遞了引用,所以對main()方法中的對象的值是有影響的

例三

如果將例二中的StringBuffer類型換成String,同樣是對象類型,你知道答案嗎?

傳值?傳引用?究竟是何種方式?JAVA編程思想卻說都不是!

同樣是對象類型,StringBuffer換成了String,結果就不一樣了,各位小夥伴,知道答案嗎?

今天關於JAVA是傳值還是傳引用的總結就到這裡,有什麼問題歡迎留言,小編會第一時間回覆的哦!

關於JAVA編程,程序員面試的知識,小編會持續總結,小夥伴們也可以在小編主頁的歷史文章中找到更多更有趣的知識!

最後是程序員鼓勵師哦!

傳值?傳引用?究竟是何種方式?JAVA編程思想卻說都不是!


分享到:


相關文章: