這篇文章主要介紹了java 中String.equals和==的比較的相關資料,需要的朋友可以參考下
java 中String.equals和==的比較
初學java有一段時間了,但是昨晚忽然就被"asd"==getpara("password")搞得不開心了:確實JAVA很多東西和以前接觸過的語言完全不一樣,例如最簡單的new String("asd") !=new String ("asd")。
1 一個最簡單的程式:
public class A { public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; System.out.println(s1 == s2); } }
肯定很多人說,輸出true,確實是輸出true,s1和s2引用的是同一個東西嘛。但是這個程式如果換一種寫法,那肯定就不太一樣了。
2 第一種變體:
public class A { public static void main(String args[]) { String s1 = "Hello"; String s2 = new String("Hello"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } }
或:
#public class A { public static void main(String args[]) { String s1 = new String("Hello"); String s2 = new String("Hello"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } }
那麼結果就有點不太確定了,有些人很壞的想到了,單獨拿出來,肯定至少有一個不會相等。
這兩個程式的結果都是false true,原因很簡單,JAVA是一個基本上完全物件導向的語言,s1 == s2 判斷的是他的引用(相當於記憶體位址、指標), equals則是使用這個物件本身的方法去判斷值是否相等。
在以下表達式中:
String s1 = "Hello"; String s2 = new String("Hello");
#JVM得到的是兩個不同的訊息:
1.我要建立一個「Hello」字串。
2.我要建立一個新的「Hello」字串,不要跟原來的一樣的。
於是,s1 != s2.
3 第二種變體:
順序排列:
public class A { public static void main(String args[]) { String s1 = new String("Hello"); String s2 = new String("Hello"); String s3 = "Hello"; s1=s1.intern(); s2=s2.intern(); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); System.out.println(s3 == s2); System.out.println(s3.equals(s2)); } }
打亂順序排列:
public class A { public static void main(String args[]) { String s1 = new String("Hello"); String s3 = "Hello"; s1=s1.intern(); String s2 = new String("Hello"); s2=s2.intern(); //也可以String s2 = new String("Hello").intern(); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); System.out.println(s3 == s2); System.out.println(s3.equals(s2)); } }
那麼這次應該很清楚了=
兩個object,但中間加入了一些羞恥的東西,所以答案一定是true true true true。
那麼intern到底是什麼。
4 intern作用:
當呼叫intern 方法時,如果池子已經包含一個等於此String 物件的字串(該物件由equals(Object ) 方法確定),則傳回池中的字串。
否則,將此 String 物件新增至池中,並且傳回此 String 物件的參考。
intern的適用情況:多個相同的大字串同時出現的情況,例如可能出現多個相同訊息的訊息佇列的設計。
以上是Java中關於String.equals與==的比較分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!