Objective-C 中 NSNumber long 的不同值

different values for NSNumber long in Objective-C

我有一个变量,它是一个 long 类型的 NSNumber。它应该保持值-1。 当我将它记录到控制台时,它显示预期值 -1.

NSLog(@"myVariable %@", self.myVariable);

但 if 子句中的以下表达式为假。

    if (myVariable == [NSNumber numberWithInt:-1]) {
    ...
    }

调试器显示值 72057594037927935。有人知道它出了什么问题吗?

谢谢!

当您将 NSNumber 与其他对象进行比较时,您有两个执行不同操作的选项:

  • 您可以使用 == 检查两个对象是否表示完全相同的对象 实例,或
  • 您可以使用 isEqual: 方法来检查两个对象是否表示相同的 value.

在你的情况下,最安全的方法是使用第二种选择

if ([myVariable isEqual:[NSNumber numberWithLong:-1]]) {
    ...
}

== 方法可能有效也可能无效,具体取决于您生成 myVariable 的方式。

NSObject 有一个方法:(NSString *)description 当您将对象放在 NSLog 方法上时,此方法将定义打印出的内容。

  • NSNumber 继承 NSObject 并且 description 方法以打印原始值的方式实现,这就是为什么您使用 NSLog(@"myVariable %@", self.myVariable);

    [=24 看到预期值的原因=]
  • 运算符“==”在这种情况下将比较 2 个对象(比较指针和值)==> 在您的情况下它将 return 为 false

  • 如果你想比较2个NSNumbers的原始值,使用下面的方法代替(BOOL)isEqualToNumber:(NSNumber *)number;