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;
我有一个变量,它是一个 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 方法以打印原始值的方式实现,这就是为什么您使用
[=24 看到预期值的原因=]NSLog(@"myVariable %@", self.myVariable);
运算符“==”在这种情况下将比较 2 个对象(比较指针和值)==> 在您的情况下它将 return 为 false
如果你想比较2个NSNumbers的原始值,使用下面的方法代替
(BOOL)isEqualToNumber:(NSNumber *)number;