#== 既可以判斷基本類型,又可以判斷引用類型,如果判斷的是基本類型,判斷的是值是否相等,如果判斷的是引用類型,則判斷的是地址是否相等,即判斷是不是同一個對象。
equals 方法是Object 類別中的方法,只能判斷引用類型,預設的是判斷位址是否相等,子類別中往往會重寫該方法,重寫後用於判斷內容是否相等
我們可以看看Object,String 和Integer中的equals 方法的JDK 原始碼。
Object o = new Object(); o.equals(1);//Object类中的equals方法 System.out.println("hello".equals("hello"));//String中的equals方法 Integer integer = new Integer(5); System.out.println(integer.equals(5));//Integer中的equals方法 //将光标放在equals方法上,按Ctrl同时按鼠标左键,就可跳转到String和Integer中的equals方法的JDK源码。
//Object类中的equals方法 public boolean equals(Object obj) { return (this == obj);//判断是不是当前对象 }
//String类中重写的equals方法 public boolean equals(Object anObject) { if (this == anObject) { return true;//首先判断是不是当前对象 } if (anObject instanceof String) {//判断当前类型是不是字符串类型 String anotherString = (String)anObject;//向下转型 int n = value.length;//保存传入字符串的长度 if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i])//一个一个字符比较 return false; i++; } return true; } } return false; }
//Integer类中重写的equals方法 public boolean equals(Object obj) { if (obj instanceof Integer) {//判断当前类型是不是Integer类型 return value == ((Integer)obj).intValue();//向下转型 } return false; }
1.API中hashCode方法的介紹
2.提高具有雜湊結構容器的效率。
3.兩個引用,如果指向的同一個對象,雜湊值一樣,指向不同對象,雜湊值就不一樣。
4.哈希值主要根據位址來的,但不能將哈希值等價於位址。
1.API中toString方法的介紹
#2.預設回傳:全類別名稱(包名類別名稱) @ 雜湊值的十六進位。
3.往往重寫toString方法,用於傳回物件屬性。
4.當直接輸出物件時,toString方法會被預設的呼叫。
//JDK中的toString方法源码 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); //返回全类名(包名+类名)+@+哈希值的十六进制 } //重写toString方法 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", gender=" + gender + '}'; }//往往重写toString方法,用于返回对象属性。
1.API中finalize方法的介紹
2.物件被回收時,系統會自動調用該物件的finalize方法。子類別可以重寫該方法,做一些釋放資源的操作。
3.當某個對象沒有引用時,jvm就會使用垃圾回收機制來銷毀此對象,銷毀對象前會先呼叫finalize方法。
4.垃圾回收機制的調用,是由系統的GC演算法來決定的,也可透過System.gc()主動觸發。
以上是Java Object類別方法實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!