c#什么不正是发生在后台时,你做了对比与"=="操作员的两个对象?不它只是比较的地址?或不喜欢的东西等于()或CompareTo()?

PS:什么有关"=="operator在java?它不会做的一样吗?

有帮助吗?

解决方案

就我所知道的:

  • 它比较价值的类型,值(平等)
  • 它进行比较的参照类型通过参照(身份)
  • 除非==operator超载,则它呼吁的那一个。

等于是实现的目的和可以复盖。默认的实施对象的执行基准比较基准类型。因此默认情况下,平等和==这样做。

我认为,在java你不能超载==operator.但我Java的知识是相当过时。

编辑: 注意, == 算是一个静态的方法。它一定在编制时间,基于类型的变量或领域。 Equals 是一个虚拟的方法,现在运行时,根据实际运行时的类型。

其他提示

来自MSDN

  

对于预定义的值类型,   如果,则等于运算符(==)返回true   其操作数的值相等,   否则是假的。适用于参考类型   除了string之外,==如果返回true则返回true   它的两个操作数指的是相同的   宾语。对于字符串类型,==   比较字符串的值。

否...... ==运算符在java和c#中的行为并不总是相同。

例如使用Strings; Java ==会比较字符串对象的引用...(如果使用primitve类型,则在java中使用==比较值)。这就是为什么

// returns FALSE in JAVA
(new String("test") == "test") 

在java中不会返回true ...

相反,在C#中,==运算符在字符串上的行为不同。例如,在以下情况下它将返回true:

// returns TRUE in C#
(new String("test".ToCharArray()) == "test") 

==运算符的行为取决于你应用它的变量是如何声明的(不是在对象的类上,我将添加一个例子)。

对于值类型,它将比较它们的值。

对于引用类型,如果a与b是同一个对象,则a == b将返回true,除非==运算符被重载。没有像其他人所说的那样被覆盖,你不能覆盖c#中的运算符,因为它们不是虚拟的。

<代码>             object obj_a,obj_b;             string str_a,str_b;

        str_a = "ABC";
        str_b = new string("ABC".ToCharArray());
        obj_a = str_a;
        obj_b = str_b;

        Console.WriteLine("str_a == str_b = {0}", str_a == str_b); // in string == operator is overloaded
        Console.WriteLine("str_a.Equals(str_b) = {0}", str_a.Equals(str_b)); // string overrides Object.Euqals
        Console.WriteLine("obj_a == obj_b = {0}", obj_a == obj_b); // in object == operator is not overloaded
        Console.WriteLine("obj_a.Equals(obj_b) = {0}", obj_a.Equals(obj_b)); // Object.Equesl is virtual and overridden method from string will be executed.
        Console.ReadKey();

<代码>

该程序的输出是

str_a == str_b = True
str_a.Equals(str_b) = True
obj_a == obj_b = False
obj_a.Equals(obj_b) = True

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top