美文网首页
关于多状态枚举值比较判断的问题

关于多状态枚举值比较判断的问题

作者: 东健FO_OF | 来源:发表于2017-01-02 19:04 被阅读140次

枚举在开发中经常用到,可以表示一种事物的几种不同状态或者类型等,于是我们通常要根据当前的状态来和枚举元素进行比较来得到当前是什么状态,但是我发现一个问题,枚举值的比较真的是按照我们给枚举赋的值来单纯地比较大小或者是否相等来得出结论的吗?废话不多说,看代码:

暂且定义一个这样的枚举并且分别赋值

然后我们来做一下最简单的if判断并输出看一下结果:

在这里大家可以猜一下结果,哈哈

结果会比较尴尬,如下:

怀疑正确性的可以敲一下哈,代码不多

为什么会出现这个结果?我们再定义一个枚举,但是这次为单个枚举赋值是采用位运算的方式【这也是苹果和众多SDK使用的】,如下:

为了好理解我把二进制数据也写出来了

然后同样在做一个赋值并且加上if判断,结果如下:


这个是结果,看出什么了吗?

解释如下:

这就是多状态枚举值比较的过程,最后输出为KTextOnly和KHUDWithText

总结:枚举的比较不是简单地值比较,而是位的比较。这种情况在什么时候会用到呢?举个例子,如果一个人同时满足了是老板并且是男人的两个条件,这个时候就要用到HttpHUDType type = KTextOnly | KHUDWithText;这样的写法,然后进行判断的时候就要留心了,如果说像第一个例子那样简单地对枚举进行了常量赋值【在发现这个问题之前我就是简单地常量赋值的🙃】,就会出现判断错误的情况,这个问题也是今天偶然发现的,说的有什么不对或者不当的地方欢迎大家批评指正😄。【NS_OPTIONS也是一样的结果哦,大家可以试下】


在这里可以提一个小建议:大家平时可以用一个控制台工程作为一个“实验工程”放在桌面上,平时有什么无关UI的疑问可以直接在那个工程里面试一下,因为控制台程序运行的比较快也不会占用大家太多的时间

相关文章

  • 关于多状态枚举值比较判断的问题

    枚举在开发中经常用到,可以表示一种事物的几种不同状态或者类型等,于是我们通常要根据当前的状态来和枚举元素进行比较来...

  • vue项目中枚举值统一维护管理

    由于多页面有时需要共同的表单枚举选择,页面以及table需要显示枚举值label以及有时需要根据枚举值判断,故个人...

  • java enum 枚举比较 == or equals ??

    问题 枚举比较报错 NPE 在使用枚举比较时,使用了equals来比较两个枚举值 结果空指针了 解决方案 1、还是...

  • 多状态值存储

    说明: 适用于少于32个状态值枚举值的多状态值存储 状态值设定为2的指数次值,如[1,2,4,8,16,32,64...

  • 10、枚举与闭包

    枚举 枚举和普通类相比有什么优势 枚举类型、枚举名称与枚举值 枚举的比较运算 两个枚举之间可以使用等值比较(==)...

  • 2020-07-01【c#】枚举的位运算 & LayerMask

    枚举的位运算 1.先通过|运算符,获得一个合并的集合结果2.将这个结果,通过和某个枚举值的&运算,进行比较判断,由...

  • Python枚举

    1. 枚举类型、枚举名称与枚举值 枚举优点: 不可更改性, 不可重复性 2. 枚举比较 枚举只能进行等于比较不能进...

  • Swift 语法(三)

    枚举 声明 获取 原始值 可以给枚举变量赋原始值 (Raw Value),例如: 此外,关于原始值,还有其他用法,...

  • 【mysql】关于枚举值 '1','0'的神奇判断

    背景与探索 最近在做一个简单的用户信息的查询及展示,其中在对用户性别判断的时候,出现了一个神奇的情况,首先数据库里...

  • Java 枚举

    问:Java 枚举类比较用 == 还是 equals,有什么区别? 答:java 枚举值比较用 == 和 equa...

网友评论

      本文标题:关于多状态枚举值比较判断的问题

      本文链接:https://www.haomeiwen.com/subject/kxnwvttx.html