0

==同じオブジェクトを指す変数を比較している場合、オブジェクトの比較に役立つことがよくあります。isEqual:ただし、これらの場合でも、常に機能すると思います。

==ポインターを比較していると思われるときに試して使用する方が良いですか、それともisEqual:プリミティブを比較しないときに常に使用する必要がありますか?

isEqual:常に を使用することで、コードにバグがあるかどうかが一目でわかるようになると思いがちです。

4

2 に答える 2

11

あなたが言ったように、を使用==すると、ポインターが比較されます。これを使用すると、2 つのオブジェクトが同じインスタンスであるかどうかがわかります。

を使用しisEqual:て、それらの値を比較します。

2 つの異なる NSString に同じテキストを含めることができます: Hello World!. それらのアドレスは異なります ( 2 つの異なるオブジェクト) が、それらの値は同じになります。

この場合==は を返しNOisEqual:を返す必要がありYESます。

例:

NSString* str1 = @"Hello World!";
NSString* str2 = [@"Hello " stringByAppendingString:@"World!"];

if (str1 == str2)
{
    NSLog(@"str1 == str2");
}

if ([str1 isEqualToString:str2])
{
    NSLog(@"str1 is equal to str2");
}

出力のみ:

2013-04-04 21:04:18.365 Test[7310:303] str1 is equal to str2

Notes:

I didn't use:

NSString* str1 = @"Hello World!";
NSString* str2 = @"Hello World!";

because the compiler generates a single object for the literal. In this case, both equalities (== and isEqual:) would have been satisfied.

于 2013-04-04T18:58:39.417 に答える