Should you use 'isEqual' or '=='?

后端 未结 2 1757
你的背包
你的背包 2020-12-04 00:06

I saw a couple of questions here on SO, with ansers including the function isEqual: instead of the standard ==.

So far, I have only learned

2条回答
  •  孤城傲影
    2020-12-04 00:32

    They do different things; so you need to use the appropriate one:

    Consider, if you will:

    NSString *a = @"Hello!";
    NSString *b = a;
    NSString *c = [a mutableCopy];
    
    if (a == b) NSLog(@"This prints");
    if (b == c) NSLog(@"This doesn't");
    if ([a isEqual:c]) NSLog(@"This does");
    

    In other words; == merely checks if two pointers point to the same place, and therefore are the same object; isEqual: checks if the two objects are equal; in this case a and b are the same string, while c is a new string that is equal to a, in that it has the same characters in the same order; but it has a different class and a different address.

    You'll almost always want to use isEqual: for objects, and, if they have it, a more specific comparator if they are of the same class (isEqualToString:, for example).

    == on the other hand you should probably only use for integer data types. (They make little sense for objects, and less for floating point numbers.)

提交回复
热议问题