作為一個菜鳥 之前一直迷茫 都說比較字符串要用equals()方法 但是有時候用==貌似也可以 話不多說 先來一個例子
public static void main(String[] args) { String str1="str"; String str2="str"; System.out.println(str1==str2);//返回true
System.out.println(str1.equals(str2));//返回true
}
返回一個 true
再來一個用==不行的例子
public static void main(String[] args) { String str1=new String("str"); String str2=new String ("str"); System.out.println(str1.equals(str2));//返回true System.out.println(str1==str2);//返回false }
經過比較得知 new()出來的字符串不能用==比較
有以下兩種原因
1、equals()方法比較的是兩個對象值 而==比較的兩個引用是否指向同一個對象 有些同學要問了 為什么直接=字符串和new()字符串難道不同嗎? 對的 第二點就是new和=的區別
2、用=時 會在字符常量串常量池中創建 如 string s="123"; 字符串常量池不屬於堆也不屬於棧 這樣就會在字符串常量池創建“123”(如果字符串常量池中已經有“123” 就把s引用指向它)。再創建一個string s1=“123”;
會把s1的引用指向已經存在的“123”;而不會再創建一個 這樣s和s1的引用都是一樣的 用==也可以判斷出來
用new()時 不管字符串常量池中有沒有 都到從堆內存中開辟一塊空間存放 new一次 開辟一次 所以 String str1=new String("str"); String str2=new String ("str");是不同的兩塊空間 所以引用也就不相同的
==只會判斷兩個引用是否指向同一個對象(也就是同一塊內存地址) 所以這時候用==是false
結論
1、==用於比較兩個引用是否指向同一個對象 equals用於比較兩個對象是否相等
2、由於字符串特殊 在字符串常量池中的字符串可以使用==也可以使用equals 推薦不管哪種方式 只要是比較字符串就用equals