Object類的重要方法
Object是所有類的最終祖先。,可以使用Object類引用任何型別的物件。在Java中,只有基本型別不是物件。
Equals方法
Object類中的equals方法用於檢測一個物件是否等於另外一個物件。在Object類中,這個方法將判斷兩個物件是否具有相同的引用。
但是,我們一般意義上的相等不僅僅是具有相同的引用,如果另個物件的狀態相等,就認為另個物件是相等的。所以,子類要重寫超級類中的equals方法。
Java中,要求equals方法具有下面的特性:
- 自反性,x.equals(x)返回ture。
- 對稱性,x.equals(y),和y.equals(x)返回相同的值。
- 傳遞性,對於任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那麼x.equals(z)也要返回true。
- 一致性,如果x和y所引用的物件沒有變化,反覆呼叫x.equals(y)應該返回同樣的結果。
- 對於任意非空引用x,x.euqals(null)應該返回false。
- package com.xujin;
- import java.util.Arrays;
- publicclass Test {
- publicstaticvoid main(String[] args) {
- Employee employee = new Employee("Bod", 5000);
-
Employee staff = employee;
- Manager manager = new Manager("Bod", 8000, 6000);
- System.out.println(employee.equals(new Employee("Bod", 5000)));//true
- System.out.println(employee.equals(staff));//true
- System.out.println(employee.equals(null));//false
-
System.out.println(manager.equals(new Manager("Bod",
- System.out.println(employee.equals(manager));//false
- System.out.println(employee instanceof Employee);//true
- System.out.println(employee instanceof Manager);//false
- System.out.println(manager instanceof Employee);//true
- //考察兩個陣列是否相同
- System.out.println(Arrays.equals(newint[]{1,2,3}, newint[]{1,2,3}));//true
- }
- }
- class Employee{
- public Employee(String name, double salary){
- this.name = name;
- this.salary = salary;
- }
- publicboolean equals(Object otherObject){
- //如果兩個物件具有相同的引用,返回true
- if(this == otherObject)
- returntrue;
- //如果otherObjext是null,返回false
- if(otherObject == null)
- returnfalse;
- //如果兩個物件所屬的類不相同,返回false
- if(this.getClass() != otherObject.getClass())
- returnfalse;
- //此時,兩個物件既不是null,他們所屬的類也相同,都為Employee
- Employee other = (Employee)otherObject;
- return name.equals(other.name) && salary == other.salary;
- }
- //定義變數
- privatedouble salary;
- private String name;
- }
- class Manager extends Employee{
- public Manager(String name, double salary, double bonus){
- super(name, salary);
- this.bonus = bonus;
- }
- publicboolean equals(Object otherObject){
- if(!super.equals(otherObject))
- returnfalse;
- Manager other = (Manager)otherObject;
- return bonus == other.bonus;
- }
- privatedouble bonus;
- }
HashCode方法
雜湊嗎,是由物件匯出的一個整型值。此方法是有Object定義的,返回該物件的儲存地址。所以,如果有必要,子類要對HashCode方法進行重寫。 注意:如果重寫了equals方法,則必須重寫HashCode方法,因為這兩個方法必須一致:如果equals方法返回true,則HashCode方法必須返回相同值。 下例中,String類已經重寫了HashCode方法,使用物件的值匯出雜湊碼,而StringBuilder方法沒有重寫HashCode方法,返回的依然是儲存單元的地址。- package com.xujin;
- publicclass Main{
- publicstaticvoid main(String...args){
- String s1 = "Hello,world!";
- String s2 = new String("Hello,world!");
- System.out.println(s1.hashCode());//2007142665
- System.out.println(s2.hashCode());//2007142665
- StringBuilder sb1 = new StringBuilder("Hello,world!");
- StringBuilder sb2 = new StringBuilder(s1);
- System.out.println(sb1.hashCode());//1291383602
- System.out.println(sb2.hashCode());//1814462232
- }
- }
toString方法
在Object類中,它用於返回物件所屬類名和雜湊碼,例如- package com.xujin;
- publicclass Main{
- publicstaticvoid main(String...args){
- System.out.println(System.out);//[email protected]
- }
- }
輸出的是一個[email protected],這是因為System.out所屬的PrintStream類並沒有覆蓋Object的toString方法。 而在大多數情況下,它用於返回表示物件值的字串。 絕大多數的toString方法都遵循這個格式: 類名[域值,域值,域值......] 如下例:
- package com.xujin;
- publicclass Main{
- publicstaticvoid main(String...args){
- Employee staff = new Employee("Bob",8000);
- System.out.println(staff.toString());
- }
- }
- class Employee{
- public Employee(String name, double salary){
- this.name = name;
- this.salary = salary;
- }
- public String toString(){
- return getClass().getName() + "[name = " + name + ", salary = " + salary + "]";
- }
- //定義變數
- privatedouble salary;
- private String name;
- }
輸出將是:com.xujin.Employee[name = Bob, salary = 8000.0] 其實,只要物件與一個字串通過操作符“+”連線起來,Java編譯就會自動的呼叫toString方法,以便獲得這個物件的字串描述。
相關推薦
JAVA-初步認識-第十一章-object類-equals方法
行修改 color 我們 兩個 例子 初步 是我 地方法 成了 一. 接下來介紹一個特殊的對象,學完繼承,多態,將要講到的,之前也接觸過。 之前談論的繼承體系子父類中,一直存在super()調用父類,父類中也有一個super()調用object。現在就是討論object對
Object類的方法
interface 監視 object c except c++ t對象 reg code 重寫 在java中,Object類是所有類的超類,所有的類都繼承Object類中的方法。 Object類中有12個成員方法,並沒有顯示聲明任何構造方法,而是存在著默認的無參的構造函數
Object類clone方法徹底剖析
一、什麼是克隆 克隆就是依據已經有的資料,創造一份新的完全一樣的資料拷貝。 在Java中物件的克隆有深克隆和淺克隆之分。有這種區分的原因是Java中分為基本資料型別和引用資料型別,對於不同的資料型別在記憶體中的儲存的區域是不同的。基本資料型別儲存在棧中,引用資料型別儲存在堆中。
Object類clone方法深度解析
首先我們來看下clone方法的原始碼 protected native Object clone() throws CloneNotSupportedException; 通過原始碼可以發現幾點: clone方法是native方法,native方法的效率遠高於非native方法,
Java 中Object類的方法
Java是單根繼承結構語言,也就是說,Java中所有的類都有一個共同的祖先,這個祖先就是Object類。 如圖所示:Object類中的方法 說明: 1、hashCode和equals函式用來判斷物件是否相同, equals()用於確認
Object類所有方法詳解——面試
工作後往往忽略一些基礎知識的複習,而在面試中常常被這些問題弄得抓耳撓腮,明明知道問題簡單卻就是回答不出來,小二在這也是感同身受,最近先整理幾篇基礎知識的博文共以後自己複習; 1.getClass public final Class<?> getC
Java中Object類的方法(toString方法和equals方法)
Object是所有類的父類(國外成為超類superclass),Object類的方法是相當少的(理解為教室人越多,他們的共同點越少)。 一:toString方法 Object的toString()方法幫助我們返回一個字串,這個字串的格式是固定的:類名@hashcode。
Object類的方法——finalize()
Java中存在垃圾回收器負責回收無用物件佔用的記憶體資源,其實垃圾回收器只會回收由new關鍵字分配的記憶體空間,對於一些通過其他途徑(比如反射)建立物件而分配的記憶體空間垃圾回收器並不能進行回收。為了應對這種情況,允許在類中定義一個finalize方法,其基本原
Java(object類及方法簡介)
object 類介紹 java.lang.Object java.lang包在使用的時候無需顯示匯入,編譯時由編譯器自動匯入。 Object類是類層次結構的根,Java中所有的類從根本上都繼承自這個類。 Object類是Java中唯一沒有父類
重寫object類equals方法(避免類中出現重複的資料)
我們知道所有的物件都擁有標識(記憶體地址)和狀態(資料),同時“==”比較兩個物件的的記憶體地址,所以說使用Object的equals()方法是比較兩個物件的記憶體地址是否相等,即若object1.equals(object2)為true,則表示equals1和
【Java面試題】之Object類中方法詳解
之前看到有人分享的面經,面試官先問Object中有什麼方法,然後再要求解釋每一次方法的作用。 先看看Object中有什麼方法 Object類是Java中所有類的基類。位於java.lang包中,一共有13個方法 方法一 Object() 即Object的構造方法 大
Object類常用方法equals和toString
spa 地址 表示 play style @+ 字符串 結果 rri Object類的常用方法 Object類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。所有類在創建對象的時候,最終找的父類就是Object。 == 可以比較的數據類型:
AJPFX關於Java Object類常用方法小總結
擁有 常用方法 false getclass sym ret sys eat equal java.lang.Object java.lang包在使用的時候無需顯示導入,編譯時由編譯器自動導入。 Object類是類層次結構的根,Java中所有的類從根
Java中Object類的方法
Object類是所有類的父類,位於java.lang包中,陣列也是Object類的子類 方法有:equals、toString、
Object類的重要方法
Object是所有類的最終祖先。,可以使用Object類引用任何型別的物件。在Java中,只有基本型別不是物件。 Equals方法 Object類中的equals方法用於檢測一個物件是否等於另外一個物件。在Object類中,這個方法將判斷兩個物件是否具有相同的引用。 但是,我們一般意義上的相等不僅僅是
Object類中重要的幾個方法
1.Object和Object.toString()輸出是否相等? public class Demo1 { public static void main(String[] args) { Object o=new Object();
Object類的常用方法及其說明
object object類 final 運行時 equal 不存在 order 監視 eight 方法名 方法描述 Object() 默認構造方法 clone() 創建並返回對象的一個副本 equals(Object obj) 指示某個其他對象是否與此對
Java:Object類的equals()方法 如何編寫一個完美的equals()方法
urn day lan 匹配 另有 net 現在 isn tar 一 代碼實例: package freewill.objectequals; /** * @author freewill * @see Core Java page161 * @desc getClas
day4(繼承、修飾符、方法的重寫、super關鍵詞、繼承中的構造方法、object類、對象轉型)
編程 權限 數列 als str list 兩個 instance 變量 1.類的繼承(extends)通過繼承,子類自動擁有父類的所有成員(成員變量和成員發方法)一個子類只能有一個父類,一個父類可以派生多個子類 2.訪問修飾符(private 默認 protected
[ 轉載 ] Java基礎10--關於Object類下所有方法的簡單解析
zed final關鍵字 pro target 解釋 temp cat turn syn 關於Object類下所有方法的簡單解析 類Object是類層次結構的根類,是每一個類的父類,所有的對象包括數組,String,Integer等包裝類,所以了解Object是很有必要