一個挺有意思的Java技術討論

來源:互聯網
上載者:User

標籤:夢想   有趣   shu   自己   class   技術分享   因此   value   圖片   

為什麼Java中1000==1000為false而100==100為true?

這是一個挺有意思的討論話題。

如果你運行下面的代碼:


 

基本知識:我們知道,如果兩個引用指向同一個對象,用==表示它們是相等的。如果兩個引用指向不同的對象,用==表示它們是不相等的,即使它們的內容相同。

因此,後面一條語句也應該是false 。

這就是它有趣的地方了。如果你看去看 Integer.Java 類,你會發現有一個內部私人類,IntegerCache.java,它緩衝了從-128到127之間的所有的整數對象。

所以事情就成了,所有的小整數在內部緩衝,然後當我們聲明類似——


 

現在,如果我們去看valueOf()方法,我們可以看到:


 

如果值的範圍在-128到127之間,它就從快取返回執行個體。

所以…


 

我們可以得到true。

現在你可能會問,為什麼這裡需要緩衝?

合乎邏輯的理由是,在此範圍內的“小”整數使用率比大整數要高,因此,使用相同的底層對象是有價值的,可以減少潛在的記憶體佔用。

然而,通過反射API你會誤用此功能。

運行下面的代碼,享受它的魅力吧:


 

分享一個Java學習q u n   六七八,二四一,五六三 每天晚上20:00都會開直播給大家分享Java知識和路線方法,裙裡會不定期更新最新的教程和學習方法(進群送2018 Java學習教程),大家都是學習Java的,或是轉行,或是大學生,還有工作中想提升自己能力的Java黨,如果你是正在學習Java的小夥伴可以加入學習。最後祝所有程式員都能夠走上人生巔峰,讓代碼將夢想照進現實,非常適合新手學習,有不懂的問題可以隨時問我,工作不忙的時候希望可以給大家解惑

一個挺有意思的Java技術討論

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.