哪个语句(true或Boolean.TRUE)会更有效

时间:2013-09-03 05:49:33

标签: java

我的bean如下

private boolean myBoolean;

public boolean isMyBoolean() {
    return myBoolean;
}

public void setMyBoolean(
        boolean myBoolean) {
    this.myBoolean = myBoolean;
}

现在,当我使用setter作为上述布尔字段时,应该采用哪种方式来实现它

setMyBoolean(true);

setMyBoolean(Boolean.TRUE);

我知道autoboxing会照顾并且两者都会起作用但我不知道这个例子中有效的方式是什么。所以我的问题是我应该使用哪一个来编写有效的代码,或者两者都同样好

TIA

5 个答案:

答案 0 :(得分:4)

使用第一个。更具可读性。你不需要关注这里的性能问题,虽然第二个涉及自动装箱并且速度相对较慢(再次,你不需要考虑它)。

在这种情况下只考虑代码可读性,并记住原语总是比对象快。

答案 1 :(得分:1)

imho

 setMyBoolean(true);

原始人总是喜欢Wrappers.Where我能够使用原语,我去找他们

因为在运行时,如果我们在运行时使用Wrappers Boxing conversionsUnboxing Conversions,显然需要更多时间。

在你的情况下

在运行时,拳击转换如下进行:

如果p是类型boolean的值,则装箱转换将p转换为类的引用r并键入Boolean,以便r.booleanValue() == p

如果你在那里使用原始,显然你节省了时间。

答案 2 :(得分:1)

原因

boolean boolVar = Boolean.TRUE;

工作是因为 autounboxing ,这是一个Java 5功能,它允许在需要时自动将包装器对象转换为其原始等效项

你可以理解,设置比自动装箱然后设置更快......

答案 3 :(得分:0)

没关系。在编译代码的最后,生成的字节码将最终使用JVM上的布尔数据类型。

我想说的是,在编译时,像这样的简单代码将自动针对JVM进行优化。使用哪种方式并不重要,请记住编译器最终会将其转换为字节码,而JVM现在一直在进行这种优化。

如果您对此持怀疑态度,可以尝试两种方式并在代码上使用分析器。你会惊讶的。

答案 4 :(得分:0)

Boolean.TRUEboolean的包装对象。

Sun SDK的布尔类实现:

public final class Boolean ... 
{
    private final boolean value;

    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FALSE = new Boolean(false);
    ...
}

使用setMyBoolean(Boolean.TRUE);时:

  1. VM创建布尔对象(在堆中)并将value保存为true。
  2. 取消装箱创建的对象,最后将原始true分配给myboolean
  3. 当您使用setMyBoolean(true);时:仅从上方执行第2步。这样更快!