比較運算符,也就是可以判斷基本型別又可以判斷參考型別
如果判斷基本類型,則判斷值是否相等
如果判斷引用類型,則判斷位址是否相等,即判斷是否為同一個物件
是object類別的一個方法,只能判斷引用型別
object - equals原始碼:
public boolean equals(Object obj) { return (this == obj); }
可以清楚的看到,object類別裡的equals方法是判斷物件的位址是否相同(是不是同一個物件)
但是,其他資料型別類別會重寫equals方法,例如String類別的重寫:(判斷兩個字串的值是否相等)
public boolean equals(Object anObject) { if (this == anObject) { return true; } return (anObject instanceof String aString) && (!COMPACT_STRINGS || this.coder == aString.coder) && StringLatin1.equals(value, aString.value); }
實例:
String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1 == str2); // false System.out.println(str1.equals(str2)); // true
提高具有雜湊結構的容器的效率
兩個引用如果指向同一個對象,雜湊值肯定(不衝突的情況下)一樣,反之不一樣
雜湊值根據位址而來但並非位址
示範:
// hashCode A a = new A(); A a1 = new A(); A a2 = a; System.out.println(a.hashCode()); System.out.println(a1.hashCode()); System.out.println(a2.hashCode()); ------------------------------
輸出:
1324119927
990368553
1324119927
傳回該物件的字串表示
#原始碼:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
##傳回該物件的字串表示
#。實例:
// toString A a3 = new A("dahe",25,"安全服务工程师"); System.out.println(a3.toString());
輸出:套件名稱.類別名稱@十六進位的hashCodeclasses.A@41629346
#現在我們在類別中重寫toString方法(模板):
@Override public String toString() { return "A{" + "name='" + name + '\'' + ", age=" + age + ", job='" + job + '\'' + '}'; }
再次運行上面的程式碼,現在輸出如下:
A{name='dahe', age=25, job='安全服务工程师'}
另外,當我們直接輸出物件時,會預設直接調用toString方法:
System.out.println(a3);
輸出:A{name='dahe', age=25, job='安全服務工程師'}
4.finalize
當物件被回收時,系統會自動呼叫該物件的finalize方法,子類別可以重寫該方法,做一些釋放資源的操作
注意:在JDK18中。 finalize被棄用了。雖然它可以幫助我們主動釋放系統底層資源,但要說實話,沒用過,Java 是自動管理記憶體的,使用它反而會導致潛在的系統安全風險,沒幫助不說反而是負擔,所以計劃移除了。
實例:
// finalize A a4 = new A("dh",33,"架构师"); a4 = null; // 这是a4成为了垃圾,垃圾回收器就会回收对象 // 在销毁对象之前,会调用对象的finalize方法 // 程序员就可以在这个方法中写入自己的业务,释放资源
重寫finalize方法:
@Override protected void finalize() throws Throwable { System.out.println("我们销毁对象"); }###除此之外,還可以主動執行垃圾回收器:###
System.gc(); // 主动调用垃圾回收器
以上是Java Object類別怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!