明らかに同じ2つの文字列の比較を行います。残念ながら、私の句doesn't仕事は予想通りとします。2つの文字列の比較が失敗する
NSLog(@"%@ == %@ ?",strippedString1,strippedString2);
if (strippedString1 == strippedString2) {
[_newBuild setTextColor: [NSColor greenColor] ];
[_OldBuild setTextColor: [NSColor greenColor] ];
}
これは私のNSLog出力:ビルド:2A12-046 ==ビルド:2A12は
でもバイト比較によるバイトは両方の文字列が同一であると言います。
手がかりはありますか?
あなたが使用できる文字列の内容を比較するために、ポインタアドレスを比較している==
で
これに加えて、コンパイラでは定数フォールディングが行われるため、 '=='比較が魔法のように動作するように見えることがあり、文字列がどこで定義され、どのコンパイラ設定を使用しているかによって失敗することがあります。 –
@MichaelAnderson:うわー...もし2つのオブジェクトが同じ(同じアドレスを持っているかどうか)をチェックしようとすると、その内容を比較することができますか? – whitelionV
私が言っていることは、 'const NSString s1 = @" hello "; ... NSString s2 = s1; ... if(s2 == @ "hello"){...} 'は、コンパイラの設定に応じて合格または不合格になることがあります。 '=='は内容を比較することはなく、場所だけを比較しますが、あなたがそれを期待していないときにその場所が同じであることがあります。私は、コンパイラは、一般的なオブジェクト定数ではなく、文字列/基本型定数を折りたたむだけだと思いますが、それが必須かどうかはわかりません。 –