Java中的Object-equals()方法
簡單的說,這個類時所有類的始祖,就和C#一樣,所有的類都是從這個類繼承而來,而在C++沒有這樣的一個類。如果沒有明確指出超類(就是父類,Java這麼稱呼吧,不太習慣),超類就是Object。
在Java中只有字元型,數值型和布林型不是物件,其他都可以從Object繼承而來。
首先,Object定義了一些基本的類方法,例如equals,toString簡直和C#一樣。還有hashCode方法。
equals方法在Object類中可以比較是否引用同一個物件,這樣解釋合情合理,只是對於大多數的類來說,直接使用真的有點雞肋,所以我們需要重寫這個類的實現。
下面是Object的equals的API,先了解下通用的equals:
(1)static boolean equals(Obicet,Object);
(2)static boolean equals(type[] a,type[] b);
第一個是之前說過的比較是否引用同一個物件,第二個是比較陣列,如果陣列的大小每個下標的值都相同的那麼兩個陣列就相等(這個還是非常好用的)。
舉例說明一下吧,比較兩個僱員相等,我們從薪資,姓名id比較都相等的話就想等。
下面是我編寫這樣的一個equals。職工類和經理類,經理類繼承與職工類。經理類比職工類多一個例項域獎金prizes。這樣的話會編寫一個子類的equals。
上面的getClass是返回物件的類,類似於C++的typeof吧。class Employee{ private String name; private int id; private double salary; private static int nextId=1; public Employee(String n,double sal) { name=n; salary=sal; id=0; } public void setId() { id=nextId; nextId++; } public int getId() { return id; } public double getSalary() { return salary; } public String getName() { return name; } public static int getNextId() { return nextId; } public boolean equals(Object other) { if(this==other)//比較是否引用同一物件 return true; if(other==null) return false; if(getClass()!=other.getClass()) return false; Employee aother=(Manager)other; return salary==aother.salary &&id==aother.id &&Object.equals(name,aother.name); } public static void main(String[] args) { Employee e=new Employee("wudi",100000); System.out.println(e.getName()+":"+e.getSalary()); System.out.println(nextId);//比較每一項的資料值,物件比較使用equals,數值比較使用== } } class Manager extends Employee{ private double prizes; public Manager(String aname,double asalary,double aprizes) { super(aname, asalary); prizes=aprizes; } public boolean equals(Object employee) { if(!(super.equals(employee))) return false; Manager otherEmployee=(Manager)employee; return prizes==otherEmployee.prizes; } }
編寫一個完美的equals的建議:
1)顯示的命名Obect,後面將轉換它,特別容易忘記
2)檢查this==other是否引用同一物件
3)檢測other是否為空,為空的話不想等
4)比較this和other是否是同一個類的物件
在這裡注意:如果每個子類都重新定義了equals的話使用getClass,所有子類都有統一的定義的話使用instanceof比較好。
這裡如果子類沒有改變的話可以這樣寫if(!(other instanceof Employee))return false;
5)把Obiect轉換為對應的類,比如上面的Empolyee類物件,然後比較每一項的資料值,物件比較使用equals,數值比較使用==
子類改變的話呼叫super即可。
相關推薦
Java中的Object-equals()方法
簡單的說,這個類時所有類的始祖,就和C#一樣,所有的類都是從這個類繼承而來,而在C++沒有這樣的一個類。如果沒有明確指出超類(就是父類,Java這麼稱呼吧,不太習慣),超類就是Object。 在Java中只有字元型,數值型和布林型不是物件,其他都可以從Object繼承而來。
java中的API,學習object的類中equals()方法中的問題,
一、什麼是API 即:Application Programing interface應用程式介面。就是javajdk中提供給我們使用的類,已經封裝好的,直接拿來用就行了。 二、Object類 object類是所有類的父類,在lang包中,lang包不用匯入。 介面中沒有構造方法
Java Object類中克隆clone()方法的使用
測試程式碼 package test04; // // protected Object clone()建立並返回物件一個副本。因為是protected型別的方法,只能在子類訪問 // 如果使用clone(),需要重寫此方法。 // 注意和Student
在定義類時,何時需要重寫Object類中equals()方法?
在比較兩個物件時可以使用==和 equals()。==用於比較兩個物件的引用地址是否相等,而equals()方法主要用於比較兩個物件的內容是否相等。和equals()的差別請參見“和equals()有什麼區別?”的解答。 在 Object 中已定義了 equals()方法,但是該方法直接採用
Java中關於==和equal的區別以及equals()方法重寫
例子i: string1="aaa"; string2="aaa"; String string3=new String("aaa"); String string4=new String("aaa"); string1==string2 // true; . string1.equals(string2)
Java 的equals()方法 和 == 的區別和聯絡
淺談Java中的equals和== 在初學Java時,可能會經常碰到下面的程式碼: String str1 = new String("hello"); String str2 = new String("hello"); System.out.print
執行緒中sleep()方法和Object類中的wait()方法的區別
這兩者的施加者是有本質區別的. sleep()是讓某個執行緒暫停執行一段時間,其控制範圍是由當前執行緒決定,也就是說,線上程裡面決定.好比如說,我要做的事情是 "點火->燒水->煮麵",而當我點完火之後我不立即燒水,我要休息一段時間再燒.對於執行的主動權是由我
Java判斷相等(==和equals()方法)
Java中判斷兩個變數是否相等有兩種方式:一種是利用==運算子,另一種是利用equals方法。如果變數是基本型別,那麼使用==和使用equals會得到相同的結果,都是判斷變數的值是否相對。如果變數是
java中的synchronize(修飾方法)
Synchronize對方法的修飾可分為對一般方法的修飾和對靜態方法的修飾,首先看Synchronize對一般方法的修飾。 Synchronize對一般方法的修飾和對程
Java學習筆記13(equals()方法;toString()方法)
test pre 輸出 setname ring ash rgs println pub equals()方法; equals方法是Object類中的方法;Object是所有類的祖宗,所以所有類都有equals()方法; boolean equals(Objec
== 與 equals()方法的區別
return 使用 自定義類 [] true 適用於 內容 lean 編譯 * equals()方法的使用 * * 1.java.lang.Object類中的equals()方法的定義: * * public boolean equals(Object obj
java中Object類的getClass方法有什麽用以及怎麽使用?
全部 pan spa 下載 index person finalize Beginner ret Object類的getClass的用法: (視頻下載) (全部書籍) Object類中有一個getClass方法,m a r k- t o- w i n:它會返回一個你
事件繫結中的call()方法和apply()方法
今天對於call方法和apply方法有些懵,所以去看了些別人的總結,感覺有了點概念,把一些大佬寫的東西中自己感覺易懂的解釋和經典的案例記錄一下。 定義 call方法: 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義:呼叫一個物件的一個
JQuery中的trim()方法去掉前後空格
function bt_submit(){ var $title = $.trim($("#title").val()); if($title=="") { ShowMessage("運營商名稱不能為空","#ff0000"); retu
tp 中的I()方法
tp 中I方法,取義Input,用來獲取前臺提交的過來的資料 下面我來說I()方法的使用技巧 I('post.name',' ','htmlspecialchars');獲取_$POST['name
Java中的equals和hashCode方法詳解
Java中的equals方法和hashCode方法是Object中的,所以每個物件都是有這兩個方法的,有時候我們需要實現特定需求,可能要重寫這兩個方法,今天就來介紹一些這兩個方法的作用。 equa
Android開發中使用startActivityForResult()方法從Activity A跳轉Activity B出現B退出時A也同時退出的解決辦法
最近一個 App 中用到了 startActivityForResult() 方法,使用的時候卻出現了一些問題,比如我在 Activity A 中呼叫該方法向 Activity B 中跳轉,如果 B 中完成一系列操作之後用 setResult(resultcode, intent); f
為什麼在重寫equals()方法時,一般都會重寫HashCode()方法?
重寫equals()方法主要是為了方便比較兩個物件內容是否相等。hashCode()方法用於返回呼叫該方法的物件的雜湊碼值,此方法將返回整數形式的雜湊碼值。 一個類如果重寫了 equals()方法,通常也有必要重寫 hashCode()方法,目的是為了維護hashCode()方法的常規協定,
如何覆寫java中的equals和hashcode方法
這篇文章算是一個翻譯,原文在:點選開啟連結,但我並沒有一字不差全部翻譯,只是選出一些重點,大家有興趣可以看看原文。 Equals和 hashCode是java中一個物件的兩個基本方法和core java的重要組成部分。Equals用
為什麼一個好的類需要覆寫toString()、hashCode()、equals()方法
第一:覆寫Object類中的toString方法public class Client { public static void main(String[] args) { System.out.println(new Person("張三"