Why is this code not recognising the NSString as being equal?

This is the code I have:

NSLog(@"name: %@", name);
    NSLog(@"service: %@", service.name);
    if (name == service.name) {
        NSLog(@"Test");
    }

Name is "Andrew’s MacBook Pro". Service is "Andrew’s MacBook Pro"

And yet I don't get a "Test" from NSLog. Any ideas why this could be?


use [string isEqualToString:@"any string"]

See a very useful discussion here: Understanding NSString comparison


For string comparisons, use [name isEqualToString:service.name]

Using == will compare to see if both pointers point to the same object, not if they point to objects with the same contents. Even if both pointers contain the same string, that does not mean they point to the same object.

If two people both have the same car, and so have the same key to unlock it, both keys are not equal and will not open both cars; each will only open the car for which it was made. If one person has a car but has an extra key made, they are equal because they open the same car (object). You can think of the pointers in this way.