这三个变量和它的用法中哪一个最快?
boolean booleanValue = true;
int booleanInt = 1;
byte booleanByte = 1;
char booleanCharI = 1;
char booleanCharS = '1';
还是别的什么?( String booleanString = "true";
)?
各有什么优势?在这种情况下,代码简单性是否比性能更重要?
这三个变量和它的用法中哪一个最快?
boolean booleanValue = true;
int booleanInt = 1;
byte booleanByte = 1;
char booleanCharI = 1;
char booleanCharS = '1';
还是别的什么?( String booleanString = "true";
)?
各有什么优势?在这种情况下,代码简单性是否比性能更重要?
你很幸运,因为最明显的方法也是最快的:boolean
变量。例如,考虑一个稍微复杂的布尔表达式,如下所示:
c = a && b || o != null && o.equals(p)
其中a
,b
和是您的“布尔”变量,并尝试针对您使用布尔值c
的情况重写它。int
您会看到您被迫引入更多的逻辑,这可能会损害性能并且肯定会损害可读性。
一般而言,除非您只对完整代码库中的原始类型进行操作,否则您将永远无法观察到您正在考虑的各种选择的差异(可能除了字符串方法)。
请注意,int、short、boolean 和 char 在 JVM 中实际上是相同的数据类型。例如,只需使用包含 boolean - javap -c 的代码反编译任何类。您会看到布尔值被转换为整数。所以 boolean 或 int - 在性能方面真的没有区别。
使用布尔值会产生包装布尔值的对象,它可能会更慢,但我相信 JVM 对此进行了优化,因为布尔值是不可变的对象,可以使用类似实习的东西。所以我相信也没有性能差异。
对于真正的优化,您可以使用 BitSet 或您自己的位集实现,基于整数在一个 int 中存储 32 个布尔值。
不能说最快,但boolean booleanValue = true;
正确使用布尔值。
很难想象在任何这些情况下都有性能优势。boolean
true
比 int
or更有意义char
1
。
如果您也考虑布尔值,则可能会有一些性能优势。boolean 比 Boolean 具有性能优势,因为 boolean 是原始类型并且使用更少的内存。
一切都取决于使用情况,如果您要拥有数百万个布尔值,请考虑使用BitSet
. 使用它将优化内存使用。另一方面,所有原始类型都以四个或八个字节表示,并在一个原子操作中设置。