Why is this code not recognising the NSString as b

2019-01-08 02:20发布

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?

4条回答
Viruses.
2楼-- · 2019-01-08 02:41

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

查看更多
Lonely孤独者°
3楼-- · 2019-01-08 02:42

use [string isEqualToString:@"any string"]

See a very useful discussion here: Understanding NSString comparison

查看更多
Lonely孤独者°
4楼-- · 2019-01-08 02:52
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");   
查看更多
聊天终结者
5楼-- · 2019-01-08 02:56

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.

查看更多
登录 后发表回答