Java 比較相等 == or .equal()?

今天在作leetcode時遇到了一個比較是否相等的問題。html

題目以下:java

LEETCODE 242. Valid Anagram

 

Given two strings s and t, write a function to determine if t is an anagram of s.ui

For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.spa

Note:
You may assume the string contains only lowercase alphabets..net

看了discuss上的答案,本身寫的代碼:code

public class Solution {
    public boolean isAnagram(String s, String t) {
        char[] sa = s.toCharArray();
        char[] ta = t.toCharArray();
        Arrays.sort(sa);
        Arrays.sort(ta);
        if(Arrays.equals(sa, ta)){ //不能用sa==ta...why??
            return true;
        }
        else
        return false;
    }
}

在第7行的if判斷語句中,一開始我使用的是if(sa==ta),然而得出的結果是錯的,相同的判斷出來也是不一樣。故上網搜索,發如今Java中:視頻

咱們知道"=="符號在比較對象的時候是比較的內存地址,而對於原始數據類型是直接比對的數據值htm

 來自於 http://www.blogjava.net/zhangyuan/archive/2010/07/24/327011.html對象

==操做符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操做符。

若是一個變量指向的數據是對象類型的,那麼,這時候涉及了兩塊內存,對象自己佔用一塊內存(堆內存),變量也佔用一塊內存,例如Objet obj = new Object();變量obj 是一個內存,new Object()是另外一個內存,此時,變量obj 所對應的內存中存儲的數值就是對象佔用的那塊內存的首地址。對於指向對象類型的變量,若是要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就須要用==操做符進行比較。

equals 方法是用於比較兩個獨立對象的內容是否相同,就比如去比較兩我的的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:
    String a=new String("foo");
    String b=new String("foo");
兩條new 語句建立了兩個對象,而後用a,b 這兩個變量分別指向了其中一個對象,這是兩個不一樣的對象,它們的首地址是不一樣的,即a 和b 中存儲的數值是不相同的,因此,表達式a==b 將返回false,而這兩個對象中的內容是相同的,因此,表達式a.equals(b)將返回true。

在實際開發中, 咱們常常要比較傳遞進行來的字符串內容是否等, 例如, String input= …;input.equals(「quit」),許多人稍不注意就使用==進行比較了,這是錯誤的,隨便從網上找幾個項目實戰的教學視頻看看,裏面就有大量這樣的錯誤。記住,字符串的比較基本上都是使用equals 方法。  blog

 
來自於 Java ==和equals()的區別【詳細版】

參考文章: http://gaocegege.com/Blog/java/java-equals

相關文章
相關標籤/搜索