1. 程式人生 > >equal與==的區別

equal與==的區別

equal與==

1.最大的區別是,==是運算子,equal是方法

簡述幾種情況下的equal與==

  1. java基本型別
  2. 比較包裝型別
  3. 比較String型別
  4. 比較物件

1.java基本型別(short,int,long,byte,char,float,double,boolean)

比較基本型別,只能用==,不能用equal,這裡的==比較的是兩個變數的值

2.比較包裝型別

==比較的是記憶體地址,因為a和b是new出來的,是兩個不同的物件,所以地址肯定是不同的,而equal比較的是值,附上原始碼

3.比較String型別

==比較的是記憶體地址,equal比較的是值

這裡給出一道題,來供參考

這道題我們一步一步來解決,首先s1==s2,==比較的是記憶體地址,而s2是new出來的新物件,new String("xxxx")放在堆中,而s1的“xxxx”放在常量池中,所以比較結果是false

第二,s1==s5,字串+的本質是建立了StringBulider物件進行append操作,然後將拼接後的StringBulider物件用toString進行處理,處理後生成的字串放在字串池中找有沒有相同值的字串,如果有將引用(s5)直接連線到已有的字串地址,所以s1和s5的地址相同

第三,s1=s3+s4,這個的原理是涉及到類載入時初始化的問題,s3和s4的結果無法在編譯期間確定,如果把s3和s4定義為final型別,結果就是true了,java在編譯時,就知道“Program”+"ming"="Programming"了,但卻是在執行時才知道s3+s4="Programming"

4.比較物件

==和equal比較的都是記憶體地址,因為equal沒有被重寫,沒有被重寫的equal都是object的equal方法