java:
String s1 = "abc";
String a1 = "a";
String b1 = "b";
String c1 = "c";
String s2 = a1+b1+c1;
s1.equals(s2)===>true
(s1==s2)===>false
c#:
string s1 = "abc";
string a1 = "a";
string b1 = "b";
string c1 = "c";
string s2 = a1+b1+c1;
s1.Equals(s2)===>True
(s1==s2)===>True
总结:
java中String equals实现的代码如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
java中==比较的是引用是否相同,equals先比较引用是否相同,若不同再比较值 是否相同。
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
java中==比较的是引用是否相同,equals先比较引用是否相同,若不同再比较值 是否相同。
c#中String Equals实现的代码如下:
public bool Equals(String value) {
if (value == null)
{
// exception will be thrown later for null this
if (this != null) return false;
}
return EqualsHelper(this, value);
}
if (value == null)
{
// exception will be thrown later for null this
if (this != null) return false;
}
return EqualsHelper(this, value);
}
c#中的Equals比较的是值是否相等,并没有比较引用是否相等,其中EqualsHelper方法是比较两个参数的值的。
c#中string重载了==号,
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
return String.Equals(a, b);
}
public static bool Equals(String a, String b) {
if ((Object)a==(Object)b) {
return true;
}
if ((Object)a==null || (Object)b==null) {
return false;
}
return EqualsHelper(a, b);
}
if ((Object)a==(Object)b) {
return true;
}
if ((Object)a==null || (Object)b==null) {
return false;
}
return EqualsHelper(a, b);
}
在c#中用==比较时会先比较两个参数的引用是否相等,若引用不相等则比较值是否相等
所以c#中的==就相当于java中的equals了