Object-C技术学习,更多资源请访问 https://www.itkc8.com
// main.m
// OC中的==和isEqual方法
//
// Created by Goddog on 15/1/10.
// Copyright (c) 2015年 Goddog. All rights reserved.
//
/*
1.如果两个变量时基本数据类型的变量,都是数值型,使用==判断酒返回真。
2.对应两个指针类型的变量,它们必须指向同一对象(两个指针变量保存的内存地址相同)时,==判断才会返回真。
3.常量池中保证相同的字符串直接量只有一个,不会产生多个副本。
4.使用NSString stringWithFormat:类方法创建的字符串对象时运行时创建出来的,它被保存在运行时内存区内(堆内存),不会放入常量池中。
5.对于两个字符串变量,可能只是要求他们指向字符串对象里包含的字符序列相同即可认为相等,此时就可用isEqual:方法。
6.我们大多时候可以重写isEqual方法,提供自定义的标准。
7.isEqualToString:方法专门用来判断当前字符串与另一个字符串的字符序列是否相等。
*/
//
// PrettyGirl.h
// OC中的==和isEqual方法
//
// Created by Goddog on 15/1/10.
// Copyright (c) 2015年 Goddog. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface PrettyGirl : NSObject
@property (nonatomic,copy) NSString* name;
@property (nonatomic,copy) NSString* nation;
-(id) initWithName:(NSString*) name andNation:(NSString*) nation;
@end
//
// PrettyGirl.m
// OC中的==和isEqual方法
//
// Created by Goddog on 15/1/10.
// Copyright (c) 2015年 Goddog. All rights reserved.
//
#import "PrettyGirl.h"
@implementation PrettyGirl
@synthesize name = _name;
@synthesize nation = _nation;
//实现
-(id) initWithName:(NSString *)name andNation:(NSString *)nation
{
if (self == [super init]) {
self.name = name;
self.nation = nation;
}
return self;
}
//重写isEqual:方法,提供自定义的标准
-(BOOL) isEqual:(id)other
{
//如果两个对象为同一对象
if (self == other) {
return YES;
}
//如果不为空,并且是类的实例时
if (other != nil && [other isMemberOfClass:PrettyGirl.class]) {
PrettyGirl* pg = (PrettyGirl*)other;
return [self.nation isEqual: pg.nation];
}
return NO;
}
@end
#import <Foundation/Foundation.h>
#import "PrettyGirl.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//
int it = 65;
float f1 = 65.0f;
NSLog(@"65与65.0是否相等?%d",it == f1); //返回1相等
char ch = 'A';
NSLog(@"65与'A'是否相等?%d",it == ch); //返回1相等
NSString* str1 = [NSString stringWithFormat:@"hello"];
NSString* str2 = [NSString stringWithFormat:@"hello"];
NSLog(@"str1与str2是否相等?%d",str1 == str2); //返回1相等?
NSLog(@"str1与str2是否相等?%d",[str1 isEqual: str2]); //返回1相等
//由于NSDate与NSString类没有继承关系,所有编译错误
//NSLog(@"难道这样相等?%d",[NSDate new] == [NSString new]);//警告,并返回0
//girl1与girl2直接指向常量池中的”无法忘却的微笑“
NSString* girl1 = @"无法忘却的微笑";
NSString* girl2 = @"无法忘却的微笑";
NSLog(@"girl1的指针保存地址:%p,girl2的指针保存地址:%p",girl1,girl2);
NSLog(@"girl1与girl2是否指向同一地址?:%d",(girl1 == girl2));
//让girl3指向新生的对象
NSString* girl3 = [NSString stringWithFormat:@"无法忘却的微笑"];
NSLog(@"我们看看girl3的指针保存地址:%p,是否与girl1相等呢?%d",girl3,(girl1 == girl3)); //0不等哦
PrettyGirl* pg1 = [[PrettyGirl alloc] initWithName:@"奥黛丽·赫本" andNation:@"英国"];
PrettyGirl* pg2 = [[PrettyGirl alloc] initWithName:@"詹妮弗·安妮斯顿" andNation:@"美国"];
PrettyGirl* pg3 = [[PrettyGirl alloc] initWithName:@"泰勒·斯威夫特" andNation:@"美国"];
NSLog(@"pg1是否与pg2相等?%d,pg2是否与pg3相等?%d",[pg1 isEqual:pg2],[pg2 isEqual:pg3]);
}
return 0;
}
Object-C技术学习,更多资源请访问 https://www.itkc8.com