java 对象 输出
我們在java的學(xué)習(xí)中,有時候會有這樣的疑問:同一個類實例化的各個對象是不同的,在哪里能夠體現(xiàn)?
假如像這樣,只有一個類,然后內(nèi)部沒有具體的方法,有一個相同的成員還是final的,怎么看出來兩個對象是同一個類嗎?區(qū)分他們不同對象在哪里?
public class Test01 {public final String str = "abd"; }我們可以通過實際的對象來比較,從結(jié)果來看,可以看出:
public class Test01 {public final String str = "abd";public static void main(String[]args){Test01 t=new Test01();Test01 t2 = new Test01();System.out.println(t.equals(t2));} }//結(jié)果為false
我們都知道,equals比較的是兩個對象的值(即存儲內(nèi)容),這里 能夠看出,equals返回的是false;
進一步,我們可以輸出兩個對象,來觀察對象到底是什么
public class Test01 {public final String str = "abd";public static void main(String[]args){Test01 t=new Test01();Test01 t2 = new Test01();System.out.println(t.toString());System.out.println(t2.toString());} }//結(jié)果是:
Test01@45bab50a
Test01@64c3c749
從輸出,我們直觀來看,前邊一部分是類名,表明這二者是屬于同一個類,然后后半部分的值不同,這里代表什么含義呢?
每個對象在實例化后,由于所有類的基類都是Object,Object類中有一個方法叫做toString(),返回的是一系列文本串
文本串的構(gòu)成為:getClass().getName() + '@' + Integer.toHexString(hashCode())
(1)我們使用System.out.print()輸出對象時,實際都是使用了這樣的一個隱含的function,返回值為類名@十六進制的哈希值
(2)不同的對象理論上說哈希值都是不會相同的,hashCode()方法要求不同的對象生成不同的哈希值,因此equals()方法會對比值之間是否相同
(3)toString()方法只反映了對象所屬的類以及哈希值,不能實際反映類的內(nèi)容,因此我們在設(shè)計類的時候一般要注意重寫toString()方法,這樣我們在輸出的時候才能得到有意義的可視結(jié)果
?
轉(zhuǎn)載于:https://www.cnblogs.com/KarayLee/p/4850424.html
總結(jié)
以上是生活随笔為你收集整理的java 对象 输出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js自定义类,混合的构造函数/原型方式
- 下一篇: 《英语语法新思维初级教程》学习笔记(二)