0

这三个变量和它的用法中哪一个最快?

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

还是别的什么?( String booleanString = "true";)?

各有什么优势?在这种情况下,代码简单性是否比性能更重要?

4

5 回答 5

3

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

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

其中a,b和是您的“布尔”变量,并尝试针对您使用布尔值c的情况重写它。int您会看到您被迫引入更多的逻辑,这可能会损害性能并且肯定会损害可读性。

一般而言,除非您只对完整代码库中的原始类型进行操作,否则您将永远无法观察到您正在考虑的各种选择的差异(可能除了字符串方法)。

于 2013-11-05T14:03:11.600 回答
1

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

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

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

于 2013-11-05T14:51:50.100 回答
0

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

于 2013-11-05T14:03:09.787 回答
0

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

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

于 2013-11-05T14:03:40.530 回答
0

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

于 2013-11-05T14:04:17.627 回答