Compare a NSNumber to an int Compare a NSNumber to an int objective-c objective-c

Compare a NSNumber to an int


  1. The result of comparison is a BOOL which is not an Objective-C object. Therefore you should not print it using %@. Try %d instead (shows 0 or 1).

  2. [a compare:b] returns -1 if a < b, 0 if a == b and 1 if a > b. So your 2nd result is expected.

  3. You cannot compare an NSNumber directly with an integer. That i == 0 is actually a pointer comparison which checks whether i is NULL (0), which of course is FALSE if that number exists. So the 1st result is also expected.

  4. If you want to check for equality, use [a isEqualToNumber:b]. Alternatively, you could extract the integer out with [a intValue] and compare with another integer directly.

So the followings should work:

NSLog(@"%@ == 0 -> %d", i, [i isEqualToNumber:[NSNumber numberWithInt:0]]);NSLog(@"%@ == 0 -> %d", i, [i intValue] == 0);

If the "number" is in fact a boolean, it's better to take the -boolValue instead.

NSLog(@"%@ == 0 -> %d", i, ! [i boolValue]);


Here you're comparing the pointer of the object i with 0, which I'm afraid is not what you want.

You most probably want to compare the value of i:

if ([i intValue]==0) {  ...}


You can easily write:

NSNumber *number = [NSNumber numberWithInt:123];int integer = 1234;NSLog(@"%@ == %i : %i", number, integer, [number intValue] == integer);

Output should be

123 == 1234 : 0


I hope i can help you!