今天下午和同事争论了一下关于”==”和”String.Equals”的区别和用法
我们先看一下下面的程序,是从 .NET Framework 帮助文档中找到的,进行了一些调整
using System;
class Test
{
public static void Main()
{
//定义String变量
string a = "hello";
string b = String.Copy(a);//创建一个新的实例
//比较恒定变量和实例字符串的值: 返回为True
Console.WriteLine(a == b);
//比较恒定变量和字符串的比较: 返回为True
Console.WriteLine(a == "hello");
//a是常量而b是一个实例,所以按照类型比较:返回为False
Console.WriteLine((object)a == (object)b);
//a是常量而b是一个实例,但是使用String.Equals()方法,比较两个对象的值:返回为True
Console.WriteLine((object)a.Equals((object)b));
}
}
从上面的代码中,我们应该已经可以非常清楚的知道几种比较的结果是怎么样的。在默认的情况下,是进行的值类型的比较,同样的道理,在JAVA中也有类似的情况。我们看一下下面的代码
class Equals
{
public static void main(String[] args)
{
String S1 = new String("Hello");
String S2 = new String("Hello");
System.out.println(S1=="Hello");//用对象和字符串比较,返回假
System.out.println(S1==S2);//进行对象比较 返回假
System.out.println(S1.equals(S2));//进行值比较 返回真
System.out.println(S1.equals("Hello"));//进行值比较 返回真
}
}
JAVA和C#有点不同的是,String对象默认是进行实例比较的,如果需要和字符串或者其他对象进行值类型比较就必须用.equals()方法才可以。这也就是为什么在JAVA中进行字符串和变量之间的比较推荐使用.equals()这种方式而不是==这种方式了。


浙公网安备 33010602011771号