7 回答
已采納

211103
TA貢獻20條經(jīng)驗 獲得超11個贊
首先在內(nèi)存中的方法是equals不是equal。
要深入的了解這個你需要具體知道數(shù)據(jù)在內(nèi)存中的存儲方式,基本數(shù)據(jù)類型和引用數(shù)據(jù)的地址是存儲在棧中,==就是比較的這個內(nèi)容。equals的話其實也是這個,在java共同父類中Object中有這個方法,不過其在String中將他進行了重寫(因為對于引用數(shù)據(jù)來講比較地址是沒用的,需要具體到值),最終在String中equals比較的就是他們的值。
其實你只要記住比較基本數(shù)據(jù)類型用==就好,String的話就用equals就好了。

阿旭_
TA貢獻217條經(jīng)驗 獲得超353個贊
public?class?Test5?extends?Object?{ public?static?void?main(String[]?args)?{ //?分析equals不同類中的源碼比較與==的不同 //?/*1、類中equals?此equals來源于Object(默認:Test5?extends?Object?)*/ //?public?boolean?equals(Object?obj)?{ //?return?(this?==?obj); //?} System.out.println(new?Test5().equals(new?Test5()));//?此時equals比較兩個不同對應的地址 //?/*2、字符串equals?("ABC".equals("ABC")和new?String("ABC").equals("ABC")等價)*/ //?public?boolean?equals(Object?anObject)?{ //?if?(this?==?anObject)?{//2.1?先判斷兩個地址是否相同 //?return?true; //?} //?if?(anObject?instanceof?String)?{?//2.2?再判斷傳入的是不是字符串 //?String?anotherString?=?(String)?anObject; //?int?n?=?value.length; //?if?(n?==?anotherString.value.length)?{//2.3如果是字符串,長度是否相同 //?char?v1[]?=?value; //?char?v2[]?=?anotherString.value; //?int?i?=?0; //?while?(n--?!=?0)?{//2.4如果長度相同,是不是每個對應位置的字符相同 //?if?(v1[i]?!=?v2[i]) //?return?false; //?i++; //?} //?return?true; //?} //?} //?return?false; //?} System.out.println("ABC".equals("ABC"));//?地址(否)字符串(是字符串)長度(相同)每個字符(相同)結(jié)果是true //?總結(jié),equals就是一個方法,不同的類有不同的代碼,也可以自己重寫設(shè)置自己想要的方法體。 //?歸根結(jié)底都要用==來比較值(char[字符串就是用的這個比的]、int、boolean……),要么比較地址(兩個對象地址是不是一樣的) } }
添加回答
舉報
0/150
提交
取消