为什么我得到2> 38 ==是吗?

时间:2014-06-15 19:17:09

标签: ios objective-c casting comparison

我的代码中有一个简单的if语句,比较两个变量:

currentScore和lpGcScore都是NSNumber

_lpGcScore = [NSNumber numberWithLongLong:board.localPlayerScore.value];

这就是我定义currentScore的方式:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // get the score from "db"
NSNumber *currentScore = [defaults valueForKey:@"currentScore"];

if语句:

if ((int)currentScore > (int)_lpGcScore) {
        NSLog(@"currentScore: %@ > _lpGcScore: %@", currentScore, _lpGcScore);
}

应用程序的日志和行为确认:

2014-06-15 14:09:53.668 LaserShipDestroyer[4461:60b] currentScore: 2 > _lpGcScore: 38

我认为这确实不是系统/语言中的错误,也许我在使用我在变量中进行比较的数字类型做一些奇怪的事情?

1 个答案:

答案 0 :(得分:3)

也许是因为你将对象转换为Int((int)currentScore),比较内存地址而不是值?

强制转换永远不会将对象(NSNumber *)转换为值类型(int)。使用类似的东西:

if ([currentScore intValue] > [_lpGcScore intValue]) ...