java中的比较
今天,在牛客網上刷了一道簡單的題,很慚愧做錯了。題目如下:
public class Demo {public static void main(String args[]){String str=new String("hello");if(str=="hello"){System.out.println("true");} else {System.out.println("false");}} }問:輸出的結果?
答案:false
這是一道很簡單的題,就是比較引用變量str的值和字符串常量hello是否相等,結果腦子抽風頭大。因此寫一篇筆記來學習下java中的**比較**
1. “==”
==運算符是六種關系運算符(==、!=、>、<、>=、<=)中的一種。它的作用是比較兩個變量的值是否相等(當然也可以比較變量的值與常量是相等)。
如果兩個變量都是基本數據類型,那么可以直接使用==比較變量的值是否相等。
如果兩個變量都是引用類型變量,由于引用類型變量的值為被引用對象在堆內存中的地址,那么==比較的是這兩個引用類型變量是否指向同一對象。
2. equals
equals是Object類提供的方法之一,因為每個java類都繼承自Object類,所以每個對象都有equals方法。equals在Object類中的定義如下:
public boolean equals(Object obj) {return (this == obj);}由此可見,在沒有重寫equals(Object obj)方法情況下,equals(Object obj)與==是一致的。
ps:Object對象在java.lang包下面,可以在rt.jar中找到。
如果想比較兩個引用變量指向的對象中的內容是否相同,就需要重寫equals方法。下面是String類重寫的equals方法:
public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}前三行表示:如果該對象與要比較的對象在堆內存中地址是一樣的,那么這兩對象的內容一定相等。
第四行:判斷需要對比對象是否是字符串,如果不是,則沒有可比性,直接返回false。
第七行:判斷兩個字符串的長度是否一致,如果不一致,則false。如果一致,則進行逐個字符比較。
總結
- 上一篇: anaconda使用记录
- 下一篇: idea使用笔记