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

关于多状态枚举值比较判断的问题
暂且定义一个这样的枚举并且分别赋值

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

关于多状态枚举值比较判断的问题
在这里大家可以猜一下结果,哈哈

结果会比较尴尬,如下:

关于多状态枚举值比较判断的问题
怀疑正确性的可以敲一下哈,代码不多

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

关于多状态枚举值比较判断的问题
为了好理解我把二进制数据也写出来了

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

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

关于多状态枚举值比较判断的问题
这个是结果,看出什么了吗?

解释如下:

关于多状态枚举值比较判断的问题
这就是多状态枚举值比较的过程,最后输出为KTextOnly和KHUDWithText

总结:枚举的比较不是简单地值比较,而是位的比较。这种情况在什么时候会用到呢?举个例子,如果一个人同时满足了是老板并且是男人的两个条件,这个时候就要用到HttpHUDType type = KTextOnly | KHUDWithText;这样的写法,然后进行判断的时候就要留心了,如果说像第一个例子那样简单地对枚举进行了常量赋值【在发现这个问题之前我就是简单地常量赋值的

相关文章:

  • 2022-02-13
  • 2021-09-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-14
  • 2022-12-23
  • 2021-09-07
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-06
  • 2022-12-23
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案