java 与 c#的 中 字符串比较“==”与“equals”的差异
.net中,其字符串特有的駐留機制,保證了在同一進程中,相同字符序列的字符串,只有一個實例,這樣能避免相同內容的字符串重復實例化,以減少性能開銷。
先來回顧一下c#中的代碼:
public static void testString()
{
String s = "Abc";
String s1 = "abc";
String s2 = "abc";
Console.WriteLine("s1==s2 ? " + (s1 == s2)); //true
Console.WriteLine("s1.Equals(s2) ? " + s1.Equals(s2)); //true
Console.WriteLine("String.Compare(s1,s,true) ? " + String.Compare(s1, s, true)); //0
Console.WriteLine("------------------------");
char[] chr = { 'a', 'b', 'c' };
String s3 = new String(chr);
Console.WriteLine("s1==s3 ? " + (s1 == s3)); //true
Console.WriteLine("s1.equals(s3) ? " + s1.Equals(s3)); //true
Console.WriteLine("String.Compare(s3, s, true) ? " + String.Compare(s3, s, true)); //0
Console.WriteLine("------------------------");
String t = "bc";
String s4 = "a" + t;
Console.WriteLine("s1==s4 ? " + (s1 == s4)); //true
Console.WriteLine("s1.equals(s4) ? " + s1.Equals(s4)); //true
Console.WriteLine("String.Compare(s4, s, true) ? " + String.Compare(s4, s, true)); //0
Console.WriteLine("------------------------");
String s5 = "a" + "bc";
Console.WriteLine("s1==s5 ? " + (s1 == s5)); //true
Console.WriteLine("s1.equals(s5) ? " + s1.Equals(s5)); //true
Console.WriteLine("String.Compare(s5, s, true) ? " + String.Compare(s5, s, true)); //0
Console.Read();
}
從運行結果可以看出,無論你怎么折騰,只要二個字符串的內容完全相同,引用始終只有一個。
?
java中其實也有類似的機制,稱為“字符串常量池”,但是java中卻允許 用new String(String str)的方式創建多個相同內容的實例。為了能區別這二種情況,java中的==與equals用來判斷字符串是否相等時,賦予了不同的含義。
==用于判定二個字符串是否引用相同,而equals用于判斷二個字符串是否內容相同
public static void testString(){
String s = "Abc";
String s1 = "abc";
String s2 = "abc";
System.out.println("s1==s2 ? " + (s1==s2)); //true
System.out.println("s1.equals(s2) ? " + s1.equals(s2)); //true
System.out.println("s1.equalsIgnoreCase(s) ? " + s1.equalsIgnoreCase(s)); //true
System.out.println("------------------------");
String s3 = new String("abc");
System.out.println("s1==s3 ? " + (s1==s3)); //false
System.out.println("s1.equals(s3) ? " + s1.equals(s3)); //true
System.out.println("s3.equalsIgnoreCase(s) ? " + s3.equalsIgnoreCase(s)); //true
System.out.println("------------------------");
char[] chr ={'a','b','c'};
String s4 = new String(chr);
System.out.println("s1==s4 ? " + (s1==s4)); //false
System.out.println("s1.equals(s4) ? " + s1.equals(s4)); //true
System.out.println("s4.equalsIgnoreCase(s) ? " + s4.equalsIgnoreCase(s)); //true
System.out.println("------------------------");
String t ="bc";
String s5 = "a" + t;
System.out.println("s1==s5 ? " + (s1==s5)); //false
System.out.println("s1.equals(s5) ? " + s1.equals(s5)); //true
System.out.println("s5.equalsIgnoreCase(s) ? " + s5.equalsIgnoreCase(s)); //true
System.out.println("------------------------");
String s6 = "a" + "bc";
System.out.println("s1==s6 ? " + (s1==s6)); //true
System.out.println("s1.equals(s6) ? " + s1.equals(s6)); //true
System.out.println("s6.equalsIgnoreCase(s) ? " + s6.equalsIgnoreCase(s)); //true
}
轉載于:https://www.cnblogs.com/bluewhale84/p/5726262.html
總結
以上是生活随笔為你收集整理的java 与 c#的 中 字符串比较“==”与“equals”的差异的全部內容,希望文章能夠幫你解決所遇到的問題。