Java筆記1

來源:互聯網
上載者:User

標籤:函數   lang   記憶體   程式設計語言   指標   就是   操作   方法   question   

一、Java的值傳遞

(知乎使用者
連結:https://www.zhihu.com/question/20628016/answer/15683373
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處)

Java 中的所有函數調用都是值傳遞。

值傳遞是指,函數在調用時,傳遞的參數不是實參本身,而是它的副本。

引用傳遞是指,函數在調用時,傳遞的參數就是實參本身(的地址)。

顯然,在使用引用傳遞的情況下,在函數體內可以對參數本身進行修改,修改結果會對函數調用者產生影響。而使用值傳遞,由於函數內對參數的修改實際上不是對參數本身,而是對參數的副本進行的修改,因此,修改結果不會對調用者產生影響。

在 Java 中,對象(類的執行個體)都是通過引用來訪問的。例如:

    Object foo = new Object();

其中,foo 是一個引用,指向了新建立的這個 Object 對象。

的確,你可以在某個方法(函數)中,對其參數引用的對象進行修改,例如:

    void doSth(Object bar) { bar.attr = newValue; }


假設某個調用者調用了 doSth 方法,並且將 foo 傳入。在方法返回之後,foo 所引用的對象的 attr 屬性變成了 newValue。但這並不是值傳遞。因為 doSth 方法體內修改的是 foo 所引用的對象,而不是 foo 本身。

在 Java 中,你絕不可能在方法體內,把作為參數傳入的引用本身指向其他對象。因為 Java 所有的函數調用都是值傳遞。這樣的修改只會修改參數的副本,而不是參數本身。

--------------

Java 的設計目的之一就是為了填 C/C++ 的各種「坑」,讓程式設計語言更加易用和易於理解,例如垃圾自動回收機制,單繼承策略,等等。引用傳遞使得方法內部可以對方法外的資料進行修改,這無疑增加了一定的(但我覺得這很少)危險性。當然,這會使語言的靈活性降低,就算你對你的資料掌控得很好,你也不能隨心所欲地修改它。事實上,你完全可以通過傳遞引用參數來修改方法外建立的對象。因此,受到制約的實際上就只有那些原生類型而已。

或許這是 Java 注重安全性與實用性而寧願放棄一些靈活性的設計哲學的一種體現。 

1.這個解釋的不錯,其實不用長篇大論,本質上講java沒有所謂的引用(地址)傳遞是因為java規定了引用本身不能操作修改記憶體位址;
2.值傳遞與引用傳遞的最大區別就是記憶體屬於copy還是share,前者屬於copy,基本類型直接copy內容,object的變數copy的是記憶體位址(也就是引用),copy過來的引用是被封裝過的,因此在java裡沒辦法操作引用去修改變數的記憶體位址,也就是你代碼解釋的情況;
3.假如說java中有"引用傳遞",那麼違背了java資深的規定,引用是"唯讀"的(而C++的指標是可讀寫的);
4.而C++由於採用的是指標,指標是"可寫"的,因此才分別給了“”copy(值傳遞)“”和"share(地址傳遞)"來作明確區分.

 

二、Java的ThreadLocal源碼分析

 

 

三、Java  ThreadLocalMap的引申 (強引用,弱引用,軟引用,虛引用)

 

四、Redis服務及應用情境

 

五、Java Spring Redis(spring配置,RedisTemplate類詳解,@CachePut\@Cacheable\@CacheEvict)

Java筆記1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.