亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

類的比較和string的比較有什么不一樣?

類的比較是指存儲地址的比較,那兩個字符串的比較是值的比較還是地址的比較?

正在回答

3 回答


首先,從你的問題就開始,你說類的比較是指存儲地址的比較,這句話是不對的。

因為,在沒有重寫equals之前,你使用equals方法,確實是比較地址的,這是因為equals屬于object這個老祖宗(基類)內的方法,初始化后的作用就是比較地址的,但是問題來了,除非你一個new出來的對象,否則肯定都為false,因為你每new一個,出來的都是開辟一個新的空間。而java所提供的類中,有的重寫了equals方法,所以最后如String,Integer,Date在這些類當中equals有其自身的實現,而不再是比較類在的存放地址了。

如果當此類是你自定義的類,你可以根據需求去重寫equals方法。就是課堂里的重寫了一個多重比較的equals方法:先比較地址,如果一樣,就返回true;再比較空對象,為false;再比較類對象,不同為false;相同了就繼續比較屬性值,相同為true,不同為false。

其次,第二個問題,String的比較,這個看你的String是new出來的還是直接賦值來的:

首先是String c=“hello”方式,這種方式,優先去“字符串緩沖池”中尋找這個“hello”字符串是否被創建了,如果有,就指向它;如果沒有則開辟空間創建;也就是相當于String c=new String("hello");

下面java提供的String類中的equals方法:

public?boolean?equals(Object?anObject)?{
????if?(this?==?anObject)?{//地址相同返回true,如不同繼續比較
????????return?true;
????}
????if?(anObject?instanceof?String)?{?//是否是String的實例?如果是繼續判斷,否則返回false;
????????//下面的代碼就是講anObject轉換成字符數組,然后逐位比較是否相同,不同返回false,相同返回true;
????????String?anotherString?=?(String)anObject;
????????int?n?=?count;
????????if?(n?==?anotherString.count)?{
????????????char?v1[]?=?value;
????????????char?v2[]?=?anotherString.value;
????????????int?i?=?offset;
????????????int?j?=?anotherString.offset;
????????????while?(n--?!=?0)?{
????????????????if?(v1[i++]?!=?v2[j++])
????????????????????return?false;
????????????}
????????????return?true;
????????}
????}
????return?false;
}

這下明白了么?String也是先比較地址,但是又都不僅僅比較地址?。?!

1 回復 有任何疑惑可以回復我~
#1

木刻雪原

純手打,望采納~~~
2016-07-12 回復 有任何疑惑可以回復我~
#2

游戲于此 提問者

非常感謝!很詳細。謝謝!
2016-07-14 回復 有任何疑惑可以回復我~

String ?自己已經重寫了 equals方法 ,你點進去看就知道了?

0 回復 有任何疑惑可以回復我~

應該是存儲地址里面內容的比較吧

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

類的比較和string的比較有什么不一樣?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號