Java學習筆記之Object常用方法


Object:萬類之祖

  == : 比較的是是否是同一個對象,比較的是地址

 

equals: 是Object里面的方法,默認的是==,比較的是地址,但在String類型里重寫為比較內容

一般我們在設計一個類中,需要重寫父類的equals方法,需要遵照以下幾個規則設計:

  • 自反性(x.equals(x)必須返回true);
  • 對稱性(x.equals(y)返回true時,y.equals(x)也必須返回true);
  • 傳遞性(x.equals(y)和y.equals(z)都返回true時,x.equals(z)也必須返回true);
  • 一致性(當x和y引用的對象信息沒有被修改時,多次調用x.equals(y)應該得到同樣的返回值);
  • 非空性(對於任何非null值的引用x,x.equals(null)必須返回false)。 
1 String s = "seven" ;
2 String s1 = "seven";
3 System.out.println(s == s1); //返回false        
4 System.out.println(s.equals(s2));//返回true

 

hashcode : 哈希碼。 native本地方法(C、C++實現),操作系統實現邏輯,把結果返還給我們。把對象的內存地址經過算法得出的一個int。

 為什么重寫equals必須重寫hashcode?

 以下為重寫equals和hashcode方法的源碼,建議自動生成

 

 1 @Override
 2     public int hashCode() {
 3         final int prime = 31;
 4         int result = 1;
 5         result = prime * result + ((name == null) ? 0 : name.hashCode());
 6         return result;
 7     }
 8     @Override
 9     public boolean equals(Object obj) {
10         if (this == obj)
11             return true;
12         if (obj == null)
13             return false;
14         if (getClass() != obj.getClass())
15             return false;
16         Person other = (Person) obj;
17         if (name == null) {
18             if (other.name != null)
19                 return false;
20         } else if (!name.equals(other.name))
21             return false;
22         return true;
23     }

 

現有兩個對象

1  Student s1=new Student("小明",18);
2 
3  Student s2=new Student("小明",18);

此時s1.equals(s2)返回true,但如果不重寫hashcode,Object默認的hashcode將對象的內存地址經過哈希算法返回給我們一個int,就違反了兩個對象相等,hashcode一定相等的規定

 

 關於hashcode的規定:

  • 兩個對象相等,hashcode一定相等
  • 兩個對象不等,hashcode不一定不等
  • hashcode相等,兩個對象不一定相等("Aa"、"BB")
  • hashcode不等,兩個對象一定不等



 toString : 把引用數據類型轉換成字符串。直接打印一個引用數據類型的對象則默認調用這個對象動態toString方法。

 finalize : 里面的邏輯會在當前對象被垃圾回收器回收的時候執行。

 clone:Object默認的方法clone()實現的是淺拷貝

下面實現一個淺拷貝的實例,首先實現接口Cloneable並覆寫方法

 

1 public class Person implements Cloneable{
2     
3     @Override
4     public Object clone() throws CloneNotSupportedException
5     {
6         Object object = super.clone();
7         return object;
8     }
9 }

 

然后可以調用clone()方法,下面代碼也展示了兩種創建對象的方法1,new    2,clone()

1 Person p1=new Person("張三",11);
2 Person p2=(Person)p1.clone();

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM