黑马程序员技术交流社区
标题:
正确比较字符串
[打印本页]
作者:
zhangshuai
时间:
2015-5-24 21:02
标题:
正确比较字符串
比较两个字符串是否相等的时候,应该使用isEqualTostring :, 而不能仅仅比价字符的指针。
举个例子:
if([thing1 isEqualToString: thing2])
{NSlog (@“The strings are the same!” );
}
不同于
if(thing1==thing2)
{
}
{Nslog(@"They are the same Object!")
}
这是因为== 运算符只判断thing1和thing2的指针数值。而不是他们所指的对象。由于thing1和thing2是不同在的字符串,所以第二种比较方式会认为他们椒不同的。
因此,如果你想检查两个对象(thing1和thing2)是否为同意实物,就应该使用运算符==。如果庶查看,是否相等,(两个字符串的内容是否相等)哪就使用isEqualTostring.
作者:
aSmallStone
时间:
2015-5-24 21:50
坐等大牛。。。。
作者:
你们敬爱的人
时间:
2015-5-24 21:55
好吧.长知识了.
作者:
wr6524798
时间:
2015-5-24 22:39
compare用得更广泛一些,不仅字符串可以 NSNumber也可以进行比较
作者:
kansiliyundi
时间:
2015-5-24 22:47
这个是哪块的知识点啊,看来我还差很多啊
作者:
woaidd99
时间:
2015-5-24 22:52
完全看不懂啊
作者:
shao
时间:
2015-5-24 23:10
进来看看,学习学习。。。。。。。。。
作者:
蜡笔小炎
时间:
2015-5-25 01:14
前几天我学到这儿也总结了一下,写的更全一点,粘出来有兴趣的朋友看下
/******************************************
* 今天对 “== 和 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;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2