一个 int 值,只能表示一个数值吗?

一个 int 值,只能表示一个数值吗?_第1张图片

正常情况下一个 int 就是代表一个数值,或者一种状态。但是Google和Oracle的工程师似乎特别喜欢用1个 int 类型来表示多种状态,源码中到处都能看到这种使用方式。

线程池

ThreadPoolExecutor中的 ctl

定义线程池的运行状态值:

一个 int 值,只能表示一个数值吗?_第2张图片

声明用来表示线程池运行状态和线程数量的变量

设置线程池状态和线程个数

获取线程池运行状态和线程个数

一个 int 值,只能表示一个数值吗?_第3张图片

Java线程池使用AtomicInteger ctl表示线程池的两种状态:

  • 运行时状态

  • 当前池中线程个数

ctl 高3位表示运行时状态,低29位表示线程个数

Java Class 修饰符

getModifiers()

定义Class的几种修饰符值

一个 int 值,只能表示一个数值吗?_第4张图片

获取Class所有的修饰符:

一个 int 值,只能表示一个数值吗?_第5张图片

判断Class是否被某一个修饰符修饰:

一个 int 值,只能表示一个数值吗?_第6张图片

Java Class 使用一个 int 变量 modifiers 的低16位来表示它的所有修饰符

Android View

MeasureSpec

定义状态UNSPECIFIED、EXACTLY、AT_MOST,以及用于过滤的MODE_MASK。

一个 int 值,只能表示一个数值吗?_第7张图片

构建MeasureSpec

一个 int 值,只能表示一个数值吗?_第8张图片

从MeasureSpec中取值

一个 int 值,只能表示一个数值吗?_第9张图片

Android View中的onMeasure方法有2个参数:

  • int widthMeasureSpec

  • int heightMeasureSpec

这两个int的高2位表示宽高设置模式,低30位表示宽高实际大小

实践

相亲平台择偶标准

比如实现一个相亲平台,相亲人员需要登记自己的真实情况与择偶要求。主要包含两方面信息:城市地址(只限北上广) + 名下资产。

这种情况就可以用1个int类型的变量来表示这两方面信息:高2位表示城市地址,低30位表示名下资产。

1 定义城市地址状态值:

一个 int 值,只能表示一个数值吗?_第10张图片

定义城市、资产过滤MASK:

3 构建城市地址与名下资产情况

4 判断城市地址与名下资产情况

一个 int 值,只能表示一个数值吗?_第11张图片

思考题

文末无广告

不知道为什么,文章写到这里我脑子里突然冒出一道题,可以借此题考验自己是否熟悉"位运算"?

如何使用"位运算"实现一个整数的正反数 ?比如:

  • 输入 10,返回 -10

  • 输入 -100,返回 100

  • 输入 0,返回 0

如果你喜欢本文

长按二维码关注

你可能感兴趣的:(一个 int 值,只能表示一个数值吗?)