2012-02-17 26 views
2

明らかに同じ2つの文字列の比較を行います。残念ながら、私の句doesn't仕事は予想通りとします。2つの文字列の比較が失敗する

NSLog(@"%@ == %@ ?",strippedString1,strippedString2); 

if (strippedString1 == strippedString2) { 
    [_newBuild setTextColor: [NSColor greenColor] ]; 
    [_OldBuild setTextColor: [NSColor greenColor] ]; 
} 

これは私のNSLog出力:ビルド:2A12-046 ==ビルド:2A12は

でもバイト比較によるバイトは両方の文字列が同一であると言います。 enter image description here

手がかりはありますか?

あなたが使用できる文字列の内容を比較するために、ポインタアドレスを比較している ==

答えて

3

:私は文字列のためだと思う

[strippedString1 isEqualToString: strippedString2]; 
+0

これに加えて、コンパイラでは定数フォールディングが行われるため、 '=='比較が魔法のように動作するように見えることがあり、文字列がどこで定義され、どのコンパイラ設定を使用しているかによって失敗することがあります。 –

+0

@MichaelAnderson:うわー...もし2つのオブジェクトが同じ(同じアドレスを持っているかどうか)をチェックしようとすると、その内容を比較することができますか? – whitelionV

+0

私が言っていることは、 'const NSString s1 = @" hello "; ... NSString s2 = s1; ... if(s2 == @ "hello"){...} 'は、コンパイラの設定に応じて合格または不合格になることがあります。 '=='は内容を比較することはなく、場所だけを比較しますが、あなたがそれを期待していないときにその場所が同じであることがあります。私は、コンパイラは、一般的なオブジェクト定数ではなく、文字列/基本型定数を折りたたむだけだと思いますが、それが必須かどうかはわかりません。 –

0

は、あなたは.equals()または同等(これは、Javaである)を使用することになっています。

0

あなたは

[strippedString1 isEqualToString:strippedString2]; 
0

重要な部分を使用する代わりに、==演算子と2 NSStringsを比較することはできません:あなたは==ポインタのの等価性をチェックします使用isEqualToString

を使用することを意味し、つまり、比較している2つのオブジェクトが実際に同じインスタンスであるかどうかを示します。

代わりに内容が同じであることを確認するつもりだと思いますが、appledocsには、isEqualよりもはるかに高速であるため、2つのオブジェクトが文字列であることがわかっているときにisEqualToStringを使用します。

関連する問題