Java性能 - 最快的'布尔'将会?

时间:2013-11-05 14:00:47

标签: java performance boolean

这三个变量中的哪一个及其用法最快?

boolean booleanValue = true;
int booleanInt = 1;
byte booleanByte = 1;
char booleanCharI = 1;
char booleanCharS = '1';

还是其他什么? (String booleanString = "true";)?

每个人有什么好处?在这种情况下,代码简单性比性能更重要吗?

5 个答案:

答案 0 :(得分:3)

你很幸运,因为最明显的方法也是最快的:boolean变量。作为一个例子,考虑一个稍微更复杂的布尔表达式,如下所示:

c = a && b || o != null && o.equals(p)

其中abc是您的“布尔”变量,并尝试重写您使用int作为布尔值的情况。你会发现你被迫引入了更多的逻辑,可能会损害性能并且肯定会损害可读性。

总的来说,除非你在完整的代码库中对原始类型进行操作,否则你将永远无法观察到你正在考虑的各种选择的差异(除了字符串方法)。

答案 1 :(得分:1)

请注意,int,short,boolean和char实际上是JVM中的相同数据类型。例如,只需用包含boolean - javap -c的代码反编译任何类。你会看到布尔值与整数相关。 所以boolean或int - 在性能方面确实没有区别。

使用Boolean会产生包装布尔值的对象,它可能会更慢,但我相信JVM会对此进行优化,因为布尔值是不可变对象,可以使用类似国际化的东西。所以我认为也没有性能差异。

对于真正的优化,您可以使用BitSet或您自己的位集实现,基于整数在一个int中存储32个布尔值。

答案 2 :(得分:0)

不能说最快,但boolean booleanValue = true;正确使用布尔值。

答案 3 :(得分:0)

很难想到在任何这些情况下都有性能优势。 boolean trueintchar 1更有意义。

如果你考虑布尔也可以有一些性能优势。 boolean over Boolean具有性能优势,因为boolean是一种原始类型并且使用更少的内存。

答案 4 :(得分:0)

一切都取决于使用情况,如果您要获得数百个布尔值,请考虑使用BitSet。使用它将优化内存使用。 另一方面,所有原始类型都以四个或八个字节表示,并在一个原子操作中设置。