==與equals的主要區別是: ==: ==常用於比較原生類型(基本數據類型):byte,short,char,int,long,float,double,boolean,比較的是他們的值。 若用==來比較兩個對象,則比較的是這兩個對象的記憶體地址。因此,除非是同一個new 出來的對象,比較結果為t ...
==與equals的主要區別是:
==:
- ==常用於比較原生類型(基本數據類型):byte,short,char,int,long,float,double,boolean,比較的是他們的值。
- 若用==來比較兩個對象,則比較的是這兩個對象的記憶體地址。因此,除非是同一個new 出來的對象,比較結果為true,不同對象用==比較都是false。
- 但是,對於擁有緩存機制的對象,例如Integer、Byte 、Short 、Long、 Character對象(目前就知道這幾個對象),在其緩存範圍內,是可以用==比較出正確的結果的。具體範圍是:Integer、Byte,Short,Long 固定範圍是:-128 到 127;Character 固定範圍是 0 到 127。除了 Integer 可以通過參數改變範圍外,其它的都不行。 具體可見我轉發的博文理解Java Integer的緩存策略【轉】
equals()方法:
在Object中的基類中定義了一個equals的方法,這個方法的初始行為是比較對象的記憶體地 址,源碼如下:
public boolean equals(Object obj) { return (this == obj); }
因此,對於沒有重寫過equals()方法的對象來說,使用equals()進行比較和用==進行比較效果相同,都是比較記憶體地址
但在一些類庫當中這個方法被覆蓋掉了,如String,Integer,Date在這些類當中equals有其自身的實現,而不再是比較類在堆記憶體中的存放地址了。因此,當我們創建自己的類的時候,若要將此類進行比較,一定要重寫equals()方法