Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 to use the ==, so I'm wondering what's better to use, what are the pros and cons of each? When should you use them?

Thank you.

like image 354
Emil Avatar asked Dec 29 '22 07:12

Emil


2 Answers

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.)

like image 116
Williham Totland Avatar answered Jan 08 '23 11:01

Williham Totland


isEqual will compare objects according to the method written for the receiver object

== compares the addresses of Objects (or their values for C type variables like ints

This means for say NSStrings == compares the address but isEquals: will look at the values of the string objects and so does something similar to strcmp

Note that many strings are interned so that their addresses are the same if their data is the same so == can appear to work in test cases.

like image 39
mmmmmm Avatar answered Jan 08 '23 09:01

mmmmmm