小谈==与isEqual方法

来源:互联网 发布:k均值聚类算法opencv 编辑:程序博客网 时间:2024/06/04 14:43

小谈==与isEqual方法

Objective-C程序中测试两个变量是否相等有两种方式,一种是利用==运算符,另一种是利用isEqual方法。
当使用==来判断俩个变量是否相等时,如果两个变量是基本类型的变量,且都是数值型(不一定要求数据类型严格相同),则只要两个变量的值相同,则返回为真。如果两个变量是指针类型的变量,它们必须指向同一个对象(也就是两个指针变量所保存的内存地址相同),才返回为真。当使用==来比较类型上没有继承关系的两个指针变量时,编译器会提示警告。
isEqual:方法是NSObject类提供的一个实例方法,因此,所有的指针变量都可调用该方法来判断是否与其它指针变量相等。但这个方法判断对象相等的标准与==符号没有区别。NSString已经重写了NSObject得isEqual:方法:只要两个字符串所包含的字符序列相同,则返回为真。另外NSString不仅重写了isEqual:方法,还定义了一个isEqualToString:方法,该方法专门用来判断两个字符串序列是否相等。在实际应用中还可能需要开发者重写此方法。
对初学者而言,NSString还有一个非常容易迷惑的地方:@“hello”直接量和【NSString stringWithFormat:@“hello”】;有什么区别呢?当程序使用形如@“hello”的字符串直接量时,系统将会使用常量池来管理这些字符串。常量池保证相同的字符串直接量只有一个,不会产生多个副本,即当两个指针变量指向一个字符串对象时,它们保存的地址值完全相等。使用NSString stringWithFormat:类方法创建的字符串对象时运行时创建出来的,它们保存在运行时内存区内(即堆内存);两个指针变量保存的地址不同。
0 0
原创粉丝点击