Equals() vs Static string.Equals() Equals() 方法是 Object 类的一个方法,它用于比较两个对象是否相等。但是,如果我们想要比较两个字符串是否相等,我们可以使用 string.Equals() 静态方法。这个方法是 string 类的一个方法,它具有与 Object.Equals() 方法相同的功能,但是它专门用于比较字符串。使用 string.Equals() 方法可以更方便地比较字符串的相等性。

21 浏览
0 Comments

Equals() vs Static string.Equals() Equals() 方法是 Object 类的一个方法,它用于比较两个对象是否相等。但是,如果我们想要比较两个字符串是否相等,我们可以使用 string.Equals() 静态方法。这个方法是 string 类的一个方法,它具有与 Object.Equals() 方法相同的功能,但是它专门用于比较字符串。使用 string.Equals() 方法可以更方便地比较字符串的相等性。

阅读关于C#中字符串比较的内容时,我发现有很多种方法来比较两个字符串是否相等。

我习惯于使用C++中的==,但我了解到如果你将一个对象与一个字符串进行比较,==默认为引用值(或类似的操作)。

然后对于Equals()方法,假设我有两个字符串。

string s1 = null;
string s2 = "Hello";

如果我执行s1.Equals(s2);,由于第一个字符串为空,我会得到一个null-reference exception异常。

但是如果我执行string.equals(s1,s2);,如果其中一个值为null,它将简单地返回false,如果两个值都是null,它将返回true,因为这两个字符串都是相等的,即它们都是null

所以,是否总是使用string.equals()方法没有任何理由不使用呢?

另外一个问题是,如果我在string.equals()中将字符串的S大写,像这样String.equals(),它仍然会运行与小写相同,但是IDE(Visual Studio 2015)会告诉我可以简化它,并将其转换为小写s。为什么会这样呢?

0
0 Comments

Equals()方法和Static string.Equals()方法都用于比较两个字符串是否相等。它们执行以下步骤:

1. 检查两个字符串是否引用同一个对象(如果是,则返回true)。它通过检查对象引用来完成(使用(object)a==(object)b进行检查)。注意,这一步还会在两个对象都为null时返回true。

2. 检查任一字符串是否为null(如果任一字符串为null,则返回false)。

3. 检查两个字符串的长度是否相等(如果长度不相等,则返回false)。

4. 如果执行到这一步,它会逐个字节比较两个字符串是否匹配(除非你在其中一个重载中指定了StringComparison类型)。注意,字节比较是通过优化的、高效的管理代码实现的,但这是一个你不需要关心的实现细节。

无论你使用哪个方法(如果你确定实例不为null),都可以。它们基本上做相同的事情,并且性能相同。

如果你调用一个null实例的实例方法,就会抛出NullReferenceException异常。然而,实例是否为null对于你的规范可能非常重要,你可能希望在比较之前检查null并相应地采取行动(使用string.Equals将隐藏这一点,可能更容易出错)。如果对于你的规范而言不重要,那么使用其中一个方法只是一个设计决策。

如果你感兴趣,操作符“==”对于两个字符串类型的实现如下:

public static bool operator == (String a, String b) {

return String.Equals(a, b);

}

因此,a == b和string.Equals(a,b)是相同的。

至于String和string,前者是System.String(需要在顶部使用using System;或指定完整的System.String.Equals),而后者是一个内置的别名(不需要在顶部使用using System;)。你可以使用任一种方式,它们的行为完全相同。

0
0 Comments

Equals() vs Static string.Equals()

在使用C#编程的过程中,我们经常需要比较字符串的值是否相同。对于这个需求,我们可以使用Equals()方法或者静态的string.Equals()方法。然而,在使用这两种方法时,我们可能会遇到一些问题。

根据MSDN的说明,string.Equals()方法用于判断两个字符串对象的值是否相同,如果相同则返回true,否则返回false。这就是为什么在某些情况下,使用string.equals(s1, s2)方法始终返回false的原因。只有当s1和s2都为null或者具有相同的值时,才会返回true。

另外一个问题是,如果我们在string.equals()中将字符串的首字母改为大写,即String.equals(),它仍然会以相同的方式运行,但是IDE(如Visual Studio 2015)会提示我们可以简化它,并将它转换为小写的s。为什么会这样呢?

原因在于,string是C#的原始类型,而System.String或者简单的String是对应的FCL(Framework Class Library)类型。这就像int和Int32一样,int是C#的原始类型,而Int32是对应的FCL类型。

所以,使用string.equals(s1, s2)方法时,在某些情况下始终返回false,只有当s1和s2都为null或者具有相同的值时,才会返回true。而使用String.equals(s1, s2)方法时,在相同的情况下则返回false。

实际上,string并不是C#中的原始类型。

为了解决这个问题,我们可以使用string.Equals()方法来比较字符串的值是否相同。同时,需要注意string和String之间的区别,以及它们对应的方法的不同行为。

0