Why is this code not recognising the NSString as b

2019-01-08 02:39发布

问题:

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?

回答1:

use [string isEqualToString:@"any string"]

See a very useful discussion here: Understanding NSString comparison



回答2:

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.



回答3:

You are comparing two objects not two string. Try [string isEqualToString:@"another string"].



回答4:

In Objective C use [string1 isEqualToString:@"string2"]; for string comparison.

Here is the code :

NSLog(@"name: %@", name);
NSLog(@"service: %@", service.name);
if ([name isEqualToString:service.name])
    NSLog(@"Strings are Equal");
else
    NSLog(@"Strings are Not Equal");