在java基本類型的比較可以用equals和==兩種方式。
大家都知道使用equals,是比較連個對象的引用,==比較的是對象本身,但是有些情況跟我想象的還是有差別的,看下面的例子:
如果按照我們原有的思維,輸出的肯定是false,true,其實並不是看輸出結果:
在看一個例子,如下:
輸出結果爲:
在JDK5.0及其以上版本,JVM在啓動的時候爲基本類型的包裝類提供了緩衝池,比如Integer池的大小-128~127
當我們使用一個值時,JVM會先到緩衝池查看是否有相同值得對象,如果有就用現成的,如果沒有就重新創建一個。
所以對於Integer來說,-128~127之間的數字是從緩衝池取得,所以這個範圍內的值在使用==號比較的時候返回的
是true,因爲他們的內存地址是相同的,128這個值超出了緩衝池的範圍,是新new出來的,內存地址不一樣,所以
返回的是false