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