这个测试是正确的:if(obj1.type == obj2.type == 1)?

时间:2014-01-15 10:30:54

标签: c# objective-c c

这个测试是正确的:if(obj1.type == obj2.type == 1)它实际上做了什么?我想知道这是否意味着某些条件&&

4 个答案:

答案 0 :(得分:7)

在C和Objective-C中,==运算符组从左到右进行计算,并产生零或一个结果。因此,您的表达式与

相同
 if(obj1.type == obj2.type)

在C#中会产生错误,因为==运算符不能应用于boolint类型的操作数。

如果您想说“如果obj1.typeobj2.type都等于1”,则需要使用两个单独的==条件,并将逻辑“AND” “他们之间的经营者:

if(obj1.type == 1 && obj2.type == 1)

答案 1 :(得分:5)

您可以将其更改为:

,而不是使用上述测试条件
    if((obj1.type == obj2.type) && (obj2.type== 1))

或者您可以尝试将其更改为::

    if((obj1.type == 1) && (obj2.type== 1))

两者之间的区别:

&& operator

&安培;&安培;仅对布尔操作数进行操作。它评估其第一个操作数。如果结果为false,则返回false。否则,它会计算并返回第二个操作数的结果。注意,如果评估第二个操作数假设没有副作用,则结果与&和/或运营商。这是短路评估的一个例子。

== Operator

对于值类型的参数,如果操作数具有相同的值,则运算符==返回true,否则返回false。对于字符串类型,如果字符串的字符序列匹配,则返回true。但是,对于其他引用类型(从System.Object派生的类型),仅当a和b引用同一对象时,a == b才返回true。

答案 2 :(得分:1)

如果obj1和obj2是自定义类的两个对象,其中有一个名为“type”的成员,那么在这种情况下,上面的语句会给你以下错误:

运算符==不能应用于'bool'和'int'类型的操作数

它给出了这个错误,因为当它评估(obj1.type==obj2.type)时,它返回bool值(true / false),使用==运算符无法与整数值进行比较。

如果要比较两个对象的类型,那么在这种情况下,您的代码不正确。 C#对象类没有任何类型的属性或成员。它有一个名为GetType()的方法,您可以按如下方式使用它来比较两个对象的类型。

  if(obj1.GetType() == obj2.GetType())

答案 3 :(得分:0)

这听起来像是一个测试问题。

对于一个它不会在c#中编译,因为obj1.type == obj2.type首先计算,然后语句尝试将该布尔结果与int进行比较。

我不能说客观c。

在c中它将编译并且可能总是失败,因为第一次比较完成并且返回false(0)或true(除了0之外的任何东西)。 ==为true返回1的几率可能是%0,但可能是%100,具体取决于编译器,因为该详细信息留给了供应商。第一个比较可能返回0xFFFFFFFF或-12表示true。此外,测试试图做的是我假设在功能上等同于

if (obj1.value == obj2.value)

然后奇怪地再次引入了对“真实”的第二次冗余和错误检查,即“if”语句可以单独执行。