1. 程式人生 > >equals、hashcode、string的區別

equals、hashcode、string的區別

equals、hashcode、string

equals()方法是用來判斷其他的物件是否和該物件相等

equals()和==的區別

    基本型別:比較用==,比較結果字面值相等即相等。

複雜型別:當他們用(==)進行比較的時候,比較的是他們在記憶體中的存放地址,所以,除非是同一個new出來的物件,他們的比較後的結果為true,否則比較後結果為false。

例如:  String a="abc";
String b="abc";
            a==b和a.equals(b);結果都會為true,因為沒有用new去新建物件,其實a和b都指向的是同一個String物件"abc",改成:
            String a=new String("abc");
            String b=new String"abc");
            後==的結果就是false了

==比較的是兩個物件的引用(即記憶體地址)是否相等,而equals()比較的是兩個物件的值(即記憶體地址裡存放的值)是否相等。

Hashcode定義

(1)HashCode的存在主要是用於查詢的快捷性,如Hashtable,HashMap等,HashCode是用來在雜湊儲存結構中確定物件的儲存地址的;

(2)如果兩個物件相同, equals方法一定返回true,並且這兩個物件的HashCode一定相同;

(3)如果物件的equals方法被重寫,那麼物件的HashCode也儘量重寫,並且產生HashCode使用的物件,一定要和equals方法中使用的一致,否則就會違反上面提到的第2點;

(4)兩個物件的HashCode相同,並不一定表示兩個物件就相同,也就是equals方法不一定返回true,只能夠說明這兩個物件在雜湊儲存結構中,如Hashtable,他們存放在同一個籃子裡。

HashCode作用

Java中的集合(Collection)有兩類,一類是List,再有一類是Set。前者集合內的元素是有序的,元素可以重複;後者元素無序,但元素不可重複。 equals方法可用於保證元素不重複,但是,如果每增加一個元素就檢查一次,如果集合中現在已經有1000個元素,那麼第1001個元素加入集合時,就要呼叫1000次equals方法。這顯然會大大降低效率。 

於是,Java採用了雜湊表的原理。