今天在作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.spaNote:
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