前几天我学到这儿也总结了一下,写的更全一点,粘出来有兴趣的朋友看下
- /******************************************
- * 今天对 “== 和 isEqual方法” 进行学习.收获如下:
- * 1. ==运算符:判断两个基本类型数值变量:值相等(不要求数据类型相同),返回真。
- * 判断两个指针类型的变量: 必须指针指向同一内存地址,才返回真。
- * 当使用==比较类型上没有继承关系的两个指针变量时,编译器会警告。
- *
- * 2. isEqual: 判断NSString字符串时:只有字符序列完全相同,返回真。
- * 其他情况:与==运算符比较结果完全相同,因此实际应用中常常需要重写isEqual方法。
- *
- * 3. @"hello" 与 [NSString stringWithFormat:@"hello"]的区别:
- * 系统会使用常量池来管理@"hello",并且常量池保证相同字符串只有一个,创建多个@"hello"的指针,将指向同一对象。
- *
- *
-
- Date: 2015/5/19
- *******************************************/
- #import <Foundation/Foundation.h>
- /**************************************************************************************/
- @interface LBXYUser : NSObject
- @property(nonatomic,copy) NSString* name;
- @property(nonatomic,copy) NSString* idstr;
- - (id)initWithName: (NSString*)name andIdstr:(NSString*)idstr;
- @end
- /*******************************************/
- @implementation LBXYUser
- @synthesize name = _name;
- @synthesize idstr = _idstr;
- - (id)initWithName:(NSString *)name andIdstr:(NSString *)idstr
- {
- if (self = [super init])
- {
- _name = name;
- _idstr = idstr;
- }
- return self;
- }
- - (BOOL)isEqual:(id)other
- { //如果两个对象指针指向同一内存,返回真
- if (self == other)
- {
- return YES;
- }
- //如果比较对象不为null,并且是同类实例
- if (other != nil && [other isMemberOfClass:LBXYUser.class])
- {
- LBXYUser* p = (LBXYUser*)other;
- return [self.idstr isEqual:p.idstr]; //以idstr属性判断是否相等
- }
- return NO;
- }
- @end
- /**************************************************************************************/
- int main(int argc, const char * argv[])
- {
- @autoreleasepool
- {
- NSString* s1 = @"hello,李炎";//初始化两个常量池字符串
- NSString* s2 = @"hello,李炎";
- NSString* s3 = [NSString stringWithFormat:@"hello,李炎"];//初始化一个字符串对象
-
- NSLog(@"s1的地址:%p",s1);//常量池保证相同字符串只有一个,s1与s2指向同一块内存地址
- NSLog(@"s2的地址:%p",s2);
- NSLog(@"s3的地址:%p\n\n",s3);//s3是用方法创建的,并不在常量池中,与s1和s2指向的内存地址并不一样
- NSLog(@"s1与s2是否相等:%d",(s1 == s2));
- NSLog(@"s1与s3是否相等:%d\n\n",(s1 == s3));
-
- LBXYUser* p1 = [[LBXYUser alloc] initWithName:@"孙悟空" andIdstr:@"852963"]; //创建两个idstr相同的对象
- LBXYUser* p2 = [[LBXYUser alloc] initWithName:@"孙行者" andIdstr:@"852963"];
- LBXYUser* p3 = [[LBXYUser alloc] initWithName:@"孙午饭" andIdstr:@"123456"]; //创建与以上idstr不相同的一个对象
- NSLog(@"p1和p2是否相等?%d",[p1 isEqual:p2]); //idstr相等,故isEqual方法返回1
- NSLog(@"p2和p3是否相等?%d",[p2 isEqual:p3]); //idstr不相等,故isEqual方法返回0
- }
- return 0;
- }
复制代码 |