图片发自简书App

在判断一个字符串类型的变量是否与某字符时相等,你可能写下这样一行代码

    if (activityType == @"0"){}  //activityType是某一个变量名

然后你会得到这样一行黄色提醒

    Fixing “direct comparison of a string literal has undefined behavior”

原因在于

  • == :比较的是指针指向的地址,OC中的对象都是用指针表示的,但在这里并不能保证activityType0相等

那么很自然可以想到使用用isEqualisEqualToString方法,这两者也是有区别的:

  • isEqualNSObject方法,官方文档是这样写的

      Returns a Boolean value that indicates whether the receiver and a given object are equal.
    返回一个bool值判断两个对象是否相等

    如果两个对象是相等的,那么他们必须有相同的哈希值

  • isEqualToStringNSString方法,而NSString是继承自NSObject的,所以isEqualToString应该是isEqual的衍生方法,是对isEqual的细分,它的官方文档是这样写的

      Returns a Boolean value that indicates whether a given string is equal to the receiver using a literal Unicode-based comparison.
    返回一个bool值判断给出的字符串是否与已有的Unicode字符相同

    如果知道了两个对象都是字符串,isEqualToStringisEqual要快

所以以上代码应该写成

    if (activityType isEqualToString @"0"){}
文/sealband(简书作者)
原文链接:http://www.jianshu.com/p/2e70a7430362
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

Objective-C中 ==、isEqual、isEqualToString判断字符串相等的更多相关文章

  1. mybatis中if标签判断字符串相等问题

    mybatis 映射文件中,if标签判断字符串sfyx变量是否是字符串Y的时候,发现并不管用: <if test="sfyx=='Y' "> and 1=1 </ ...

  2. C#中使用IndexOf()判断字符串在字符串数组中第一次出现的索引位置

    ] {"}; "; //判断字符串的前几位在另一个字符串数组中第一次出现的索引位置 index = Array.IndexOf(s, s1.Substring(, ));

  3. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  4. 用递归法判断字符串A中包含多少个字符串B

    string类提供了判断字符串B在字符串A中首次(或最后)出现的Index的方法,但有时候需要判断B在A中出现了多少次. 为此想了一个算法. public static void CountIndex ...

  5. PHP判断字符串中是否包含指定字符串,支持中文哦

    RT,随手写的 /** * 判断字符串中是否包含指定字符串 * @var source 源字符串 * @var target 要判断的是否包含的字符串 * @return bool */ functi ...

  6. 字符串--java中判断字符串是否为数字的方法的几种方法?

    ava中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < ...

  7. 判断字符串中是否有SQL攻击代码

    判断一个输入框中是否有SQL攻击代码 public const string SQLSTR2 = @"exec|cast|convert|set|insert|select|delete|u ...

  8. ***用php的strpos() 函数判断字符串中是否包含某字符串的方法

    判断某字符串中是否包含某字符串的方法 if(strpos('www.idc-gz.com','idc-gz') !== false){ echo '包含'; }else{ echo '不包含'; } ...

  9. [C#]判断字符串中是否包含中文

    关键代码: /// <summary> /// 判断字符串中是否包含中文 /// </summary> /// <param name="str"&g ...

随机推荐

  1. android图像处理系列之六--给图片添加边框(下)-图片叠加

    前面介绍了一种用透明图片叠加的方式添加花边边框,下面将介绍另外一种图片叠加添加花边边框的方式.前面方法有一个缺点,就是做成PNG图片,图片体积会很大,不是一般的大,比同样的JPG大三倍多,如果项目可以 ...

  2. Linux启动(续)

    runlevel (启动级别):    查看命令 :who -r 或 runlevel         0:halt 关机         1:单用户模式,直接以管理员身份登录,不需要密码       ...

  3. 【SonicUI】关于字体高亮的问题。。

    m_pSonicString[1]->Format(_T("/c=%x, a='http://hi.csdn.net/', linkh=0xFF00F0, font, font_hei ...

  4. ES6 数组、对象的扩展

    8. 数组的扩展 扩展运算符(...),将一个数组转为用逗号分隔的参数序列. 复制数组 const a2=[...a1] 合并数组 [...arr1, ...arr2, ...arr3]; arr1. ...

  5. Ubuntu14.04中踩过的坑

    今天安装Ubuntu 14.0.4,因为需要使用python3,所以就直接配置如下:sudo rm /usr/bin/pythonsudo ln -s /usr/bin/python3.5  /usr ...

  6. Java Web学习总结(8)——使用Cookie进行会话管理

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  7. R语言- 基本统计分析

    目的: 1.描述性统计分析 2.频数表和;列连表 3.相关系数和协方差 4.t检验 5.非参数统计 在上一节中使用了图形来探索数据,下一步就是给出具体的数据来描述每个变量的分布和关系 1.描述性统计分 ...

  8. RMAN-03002、RMAN-06059

    使用RMAN备份的时候无法正常备份,抛出以下错误: RMAN-03002: failure of backup command at 04/20/2015 18:55:45 RMAN-06059: e ...

  9. windows下安装wabt

    windows下安装wabt 安装前准备cmake.mingw环境 安装cmake 安装mingw 步骤 # 1.克隆wabt源码 git clone https://github.com/WebAs ...

  10. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...