java字串“==”與“equals”的差異及與c#的區別
.net中,其字串特有的駐留機制,保證了在同一程式中,相同字元序列的字串,只有一個例項,這樣能避免相同內容的字串重複例項化,以減少效能開銷。
先來回顧一下c#中的程式碼:
public static void testString() 2 { 3 String s = "Abc"; 4 String s1 = "abc"; 5 String s2 = "abc"; 6 7 8 Console.WriteLine("s1==s2 ? " + (s1 == s2)); //true 9 Console.WriteLine("s1.Equals(s2) ? " + s1.Equals(s2)); //true 10 Console.WriteLine("String.Compare(s1,s,true) ? " + String.Compare(s1, s, true)); //0 11 Console.WriteLine("------------------------"); 12 13 14 char[] chr = { 'a', 'b', 'c' }; 15 String s3 = new String(chr); 16 Console.WriteLine("s1==s3 ? " + (s1 == s3)); //true 17 Console.WriteLine("s1.equals(s3) ? " + s1.Equals(s3)); //true 18 Console.WriteLine("String.Compare(s3, s, true) ? " + String.Compare(s3, s, true)); //0 19 Console.WriteLine("------------------------"); 20 21 String t = "bc"; 22 String s4 = "a" + t; 23 Console.WriteLine("s1==s4 ? " + (s1 == s4)); //true 24 Console.WriteLine("s1.equals(s4) ? " + s1.Equals(s4)); //true 25 Console.WriteLine("String.Compare(s4, s, true) ? " + String.Compare(s4, s, true)); //0 26 Console.WriteLine("------------------------"); 27 28 String s5 = "a" + "bc"; 29 Console.WriteLine("s1==s5 ? " + (s1 == s5)); //true 30 Console.WriteLine("s1.equals(s5) ? " + s1.Equals(s5)); //true 31 Console.WriteLine("String.Compare(s5, s, true) ? " + String.Compare(s5, s, true)); //0 32 Console.Read(); 33 }
從執行結果可以看出,無論你怎麼折騰,只要二個字串的內容完全相同,引用始終只有一個。
java中其實也有類似的機制,稱為“字串常量池”,但是java中卻允許 用new String(String str)的方式建立多個相同內容的例項。為了能區別這二種情況,java中的==與equals用來判斷字串是否相等時,賦予了不同的含義。
==用於判定二個字串是否引用相同,而equals用於判斷二個字串是否內容相同:
1 public static void testString(){ 2 String s = "Abc"; 3 String s1 = "abc"; 4 String s2 = "abc"; 5 6 System.out.println("s1==s2 ? " + (s1==s2)); //true 7 System.out.println("s1.equals(s2) ? " + s1.equals(s2)); //true 8 System.out.println("s1.equalsIgnoreCase(s) ? " + s1.equalsIgnoreCase(s)); //true 9 System.out.println("------------------------"); 10 11 String s3 = new String("abc"); 12 System.out.println("s1==s3 ? " + (s1==s3)); //false 13 System.out.println("s1.equals(s3) ? " + s1.equals(s3)); //true 14 System.out.println("s3.equalsIgnoreCase(s) ? " + s3.equalsIgnoreCase(s)); //true 15 System.out.println("------------------------"); 16 17 char[] chr ={'a','b','c'}; 18 String s4 = new String(chr); 19 System.out.println("s1==s4 ? " + (s1==s4)); //false 20 System.out.println("s1.equals(s4) ? " + s1.equals(s4)); //true 21 System.out.println("s4.equalsIgnoreCase(s) ? " + s4.equalsIgnoreCase(s)); //true 22 System.out.println("------------------------"); 23 24 String t ="bc"; 25 String s5 = "a" + t; 26 System.out.println("s1==s5 ? " + (s1==s5)); //false 27 System.out.println("s1.equals(s5) ? " + s1.equals(s5)); //true 28 System.out.println("s5.equalsIgnoreCase(s) ? " + s5.equalsIgnoreCase(s)); //true 29 System.out.println("------------------------"); 30 31 String s6 = "a" + "bc"; 32 System.out.println("s1==s6 ? " + (s1==s6)); //true 33 System.out.println("s1.equals(s6) ? " + s1.equals(s6)); //true 34 System.out.println("s6.equalsIgnoreCase(s) ? " + s6.equalsIgnoreCase(s)); //true 35 36 37 }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4662/viewspace-2800412/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java中(==)與equals的區別Java
- Java面試題 equals()與"=="的區別?Java面試題
- Java基礎-- ==號與equals()方法的區別Java
- 【差異】LENGTH與VSIZE的區別演示
- equals與==的區別(詳解)
- c#與java的區別C#Java
- Java之String的equals與contentEquals區別Java
- Java中equals與==的本質區別是什麼?Java
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- 【Java】equals 和 == 的區別Java
- module.exports、exports 、export default之間的差異區別及與require、import的使用ExportUIImport
- C#基礎之==(雙等於號)與equals()區別C#
- javaSE中的==和equals的聯絡與區別Java
- java 中equals和==的區別Java
- Java中equals和==的區別Java
- C#之Equals與==C#
- 關於Java的GZIP壓縮與.net C#的GZIP壓縮的差異JavaC#
- .net與C#的區別C#
- Java中 equals() 方法和 == 的區別Java
- 在java中“equals”和“==”的區別Java
- Scala與Java差異(五)之Map與TupleJava
- 字串大小的不同求法與區別字串
- C# 中的 == 和 equals()有什麼區別?C#
- PostgreSQL與Oracle的sql差異SQLOracle
- 【譯】框架與庫的差異框架
- java與php區別或異同(整理、整合)JavaPHP
- 【轉載】C#之int與Java之Integer的區別C#Java
- Java:比較運算子compareTo()、equals()、==之間的區別與應用總結Java
- C#陣列與集合的區別C#陣列
- C#中List與IList的區別C#
- Java經典面試題: == 和 equals( )的區別Java面試題
- Scala與Java差異(三)之函式Java函式
- JAVA 與 C++ 的區別JavaC++
- Java Bean 與 EJB的區別JavaBean
- 奇異矩陣與非奇異矩陣的定義與區別矩陣
- Redis的配置及與memcached區別Redis
- ==和equals方法的區別
- typeof、instanceof與isPrototypeOf()的差異與聯絡