==和equals在比較字符串時候的區別


作為一個菜鳥  之前一直迷茫 都說比較字符串要用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM