gpt4 book ai didi

java - 将 Boolean.TRUE/Boolean.FALSE 或 true/false 分配给 boolean 原始变量是否更好?

转载 作者:行者123 更新时间:2023-12-04 11:54:55 25 4
gpt4 key购买 nike

在进行一些代码审查时,我偶然发现了这一点:
人们通常分配Boolean.TRUEBoolean.FALSE值到一个装箱的 boolean 变量,但使用 true/false对于原始变量。最好的方法是什么?
据我合作过的一位建筑师说 - 他说每次你分配 true/false对于一个变量,一个新的 Boolean 实例被创建。如果我们将 boolean 变量分配给静态实例,我们可以跳过它 - Boolean.FALSE/Boolean.TRUE .如果变量是原始变量,则完成自动拆箱。
自动拆箱是否比 boolean 变量的初始化更快?差异不大,我认为这只是对代码的微优化,但我想了解更多。

最佳答案

你是对的,性能问题主要是一种干扰。
要了解发生了什么,让我们看看在 Java 类型系统中如何对原语及其框进行建模。
C extends D ,这意味着 C is-a D ,或者那个 CD 的子类型.分配 Integer 时至 Number ,不需要转换,因为 Integer is-a Number .在引擎盖下,两者都是 IntegerNumber由指针(对象引用)表示,赋值只是一个指针副本。boolean之间的关系和 Boolean是不同的,虽然。没有extends ;没有is-a。相反,有装箱和拆箱转换,它们应用于某些上下文(例如,赋值、方法参数)。它们的表示是不同的。所以当你在 boolean 之间转换时和 Boolean ,形式发生变化(从 boolean 值的直接表示,到指向包含对象头和 boolean 有效负载的堆节点的指针。)这就是人们警告您“性能成本”的原因;这不仅仅是复制一个词。 (也就是说,如果这是您程序中的性能瓶颈,那么您就会遇到更大的问题——即您的程序没有做太多事情。)
当你分配

boolean b = true;
或者
Boolean bb = Boolean.TRUE;
=两边的类型都一样-- boolean在第一个示例中, Boolean在第二个 - 没有转换。当你做
boolean b = Boolean.TRUE;
或者
Boolean bb = true;
类型不同,需要进行转换。编译器默默地将这些转换为:
boolean b = Boolean.TRUE.booleanValue();
Boolean bb = Boolean.valueOf(true);
boolean的具体情况下,性能问题甚至比其他原语更不相关,因为只有两个 boolean 值和常量 Boolean.TRUEBoolean.FALSE被实习。
如果您的架构师主要针对性能问题向您提供此建议,那么他/她就被误导了。如果他们的建议更多是出于简单性——使用不需要转换的正确类型的值同样容易——这是明智的。

关于java - 将 Boolean.TRUE/Boolean.FALSE 或 true/false 分配给 boolean 原始变量是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66904071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com