2011-12-24 91 views
1

這是我的代碼:爲什麼這段代碼不能識別NSString是否相等?

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

名稱是 「安德魯的MacBook Pro的」。 服務是「安德魯的MacBook Pro」

但我沒有從NSLog得到「測試」。任何想法,爲什麼這可能是?

回答

18

使用[string isEqualToString:@"any string"]

看到這裏一個非常有用的討論:Understanding NSString comparison

+0

啊,當然。忘記了這種方法。謝謝。 – Andrew 2011-12-24 17:29:06

7

對於字符串比較,而不是是否使用[name isEqualToString:service.name]

使用==會比較,看看這兩個指針指向同一個對象,他們指向具有相同內容的對象。即使兩個指針都包含相同的字符串,這並不意味着它們指向相同的對象。

如果兩個人都有同一輛車,所以有相同的鑰匙來解鎖它,兩個鑰匙是不相等的,不會打開兩輛車;每個人只會打開它製造的汽車。如果一個人有一輛車,但有一個額外的鑰匙,他們是平等的,因爲他們打開同一輛車(物體)。你可以用這種方式來思考指針。

6

您正在比較兩個對象不是兩個字符串。嘗試[string isEqualToString:@"another string"]

1
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"); 
相關問題