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之String的equals與contentEquals區別Java
- Java面試題 equals()與"=="的區別?Java面試題
- Java基礎-- ==號與equals()方法的區別Java
- equals與==的區別(詳解)
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- Java中equals與==的本質區別是什麼?Java
- 【Java】equals 和 == 的區別Java
- module.exports、exports 、export default之間的差異區別及與require、import的使用ExportUIImport
- C#基礎之==(雙等於號)與equals()區別C#
- javaSE中的==和equals的聯絡與區別Java
- java 中equals和==的區別Java
- .net與C#的區別C#
- C#之Equals與==C#
- Java中 equals() 方法和 == 的區別Java
- json 物件與json 字串的區別。JSON物件字串
- 字串大小的不同求法與區別字串
- Scala與Java差異(五)之Map與TupleJava
- C#陣列與集合的區別C#陣列
- PostgreSQL與Oracle的sql差異SQLOracle
- 【譯】框架與庫的差異框架
- Java基礎- ==和equals和hashCode的區別Java
- Java synchronized與ReentrantLock的區別JavasynchronizedReentrantLock
- C#中抽象方法與虛方法的區別詳解及示例C#抽象
- C# 有關List<T>的Contains與Equals方法C#AI
- Scala與Java差異(三)之函式Java函式
- 奇異矩陣與非奇異矩陣的定義與區別矩陣
- Gerrit的用法及與gitlab的區別Gitlab
- ==和equals方法的區別
- ajax與jsonp的區別及用法JSON
- Redis的配置及與memcached區別Redis
- RMS與Std的差別:均方差與標準差
- Java經典面試題: == 和 equals( )的區別Java面試題
- Scala與Java差異(二)之條件控制與迴圈Java
- TiDB與MySQL的SQL差異及執行計劃簡析TiDBMySql
- Java與C語言的區別?JavaC語言
- 27、EJB與JAVA BEAN的區別?JavaBean
- Java泛型T與?的區別Java泛型