Questions tagged «equals-operator»

12
运算符==不能应用于C#中的泛型类型吗?
根据MSDN中==运营商的文档, 对于预定义的值类型,相等运算符(==)如果其操作数的值相等,则返回true,否则返回false。对于字符串以外的引用类型,如果==的两个操作数引用同一对象,则==返回true。对于字符串类型,==比较字符串的值。用户定义的值类型可能会使==运算符重载(请参阅运算符)。用户定义的引用类型也可以,尽管 默认情况下==的行为与上述预定义和用户定义的引用类型相同。 那么,为什么此代码片段无法编译? bool Compare<T>(T x, T y) { return x == y; } 我收到错误运算符'=='不能应用于类型'T'和'T'的操作数。我不知道为什么,因为据我所知,该==操作符是为所有类型预定义的? 编辑:谢谢大家。起初我没有注意到该声明仅与引用类型有关。我还认为为所有值类型提供了逐位比较,现在我知道这是不正确的。 但是,如果我使用的是引用类型,==操作员会使用预定义的引用比较吗?如果定义了一个类型,它会使用操作员的重载版本吗? 编辑2:通过反复试验,我们了解到,==当使用无限制的泛型类型时,运算符将使用预定义的引用比较。实际上,编译器将使用它可以为受限类型参数找到的最佳方法,但是不再赘述。例如,true即使Test.test<B>(new B(), new B())被调用,下面的代码也将始终print : class A { public static bool operator==(A x, A y) { return true; } } class B : A { public static bool operator==(B x, B y) …

7
Java:整数等于= =
从Java 1.5中,你几乎可以互换Integer使用int在许多情况下。 但是,我发现代码中存在潜在的缺陷,这让我有些惊讶。 如下代码: Integer cdiCt = ...; Integer cdsCt = ...; ... if (cdiCt != null && cdsCt != null && cdiCt != cdsCt) mismatch = true; 值相等时,似乎错误地设置了不匹配,尽管我无法确定在什么情况下。我在Eclipse中设置了一个断点,发现Integer值都为137,并且检查了布尔表达式,并说它是假的,但是当我越过它时,它会将不匹配设置为true。 将条件更改为: if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt)) 解决了问题。 谁能阐明为什么会这样?到目前为止,我只在自己的PC上的本地主机上看到了该行为。在这种情况下,代码成功地进行了约20次比较,但失败了2次。该问题始终可再现。 如果这是一个普遍的问题,那应该会在我们的其他环境(开发和测试)上引起错误,但是到目前为止,在执行了数百个测试代码片段之后,没有人报告过该问题。 ==比较两个Integer值是否仍然不合法? 除了以下所有出色的答案之外,下面的stackoverflow链接还有很多其他信息。它实际上会回答我原来的问题,但是因为我没有在问题中提及自动装箱,所以它没有出现在所选建议中: 为什么编译器/ JVM不能使自动装箱“正常工作”?

3
Python中“(1,)== 1”是什么意思?
我正在测试元组结构,当我==像这样使用运算符时发现它很奇怪: >>> (1,) == 1, Out: (False,) 当我将这两个表达式分配给变量时,结果为true: >>> a = (1,) >>> b = 1, >>> a==b Out: True 在我看来,这个问题与Python元组尾随逗号语法规则不同。请问==运算符之间的表达式组。


3
什么时候复制C#值/对象,什么时候复制其引用?
我一遍又一遍地不断遇到相同的问题,在该位置我要引用的对象被复制或在我要复制的对象被引用。当我使用=运算符时,会发生这种情况。 例如,如果我将对象发送到另一种形式,即: SomeForm myForm = new SomeForm(); SomeObject myObject = new SomeObject(); myForm.formObject = myObject; ...然后修改表单中的对象,原始对象不会被修改。好像对象已被复制但未被引用。但是,当我这样做时: SomeObject myObject = new SomeObject(); SomeObject anotherObject = new SomeObject(); anotherObject = myObject; ...然后修改anotherObject,也myObject将被修改。 最糟糕的情况是当我尝试克隆我定义的对象之一时: public class SomeObject { double value1, value2; //default constructor here public SomeObject(val1, val2) { value1 = val1; value2 = …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.