------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ———
/******************************************
* 今天对 “==和 isEqual方法”进行学习.收获如下:
* 1. ==运算符:判断两个基本类型数值变量:值相等(不要求数据类型相同),返回真。
* 判断两个指针类型的变量: 必须指针指向同一内存地址,才返回真。
* 当使用==比较类型上没有继承关系的两个指针变量时,编译器会警告。
*
* 2. isEqual:判断NSString字符串时:只有字符序列完全相同,返回真。
* 其他情况:与==运算符比较结果完全相同,因此实际应用中常常需要重写isEqual方法。
*
* 3. @"hello" 与 [NSString stringWithFormat:@"hello"]的区别:
* 系统会使用常量池来管理@"hello",并且常量池保证相同字符串只有一个,创建多个@"hello"的指针,将指向同一对象。
*
*
*******************************************/
#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;
}