我应该在断言中装箱还是取消装箱?

Jav*_*per 1 java unboxing

假设我有一个方法foo:

public Integer foo () { return 1; }
Run Code Online (Sandbox Code Playgroud)

以上哪个选项的价格较低?拳击还是拆箱?

assert(1, (int) foo()));
Run Code Online (Sandbox Code Playgroud)

assert((Integer)3, foo());
Run Code Online (Sandbox Code Playgroud)

Ell*_*sch 6

以上哪个选项的价格较低?拳击还是拆箱?

当你问哪个便宜时,你正专注于错误的问题.这是过早优化的一个示例,使用包装器类将对性能产生轻微影响.所以,如果你想优化,你应该使用原语int.

public int foo () { return 1; }
Run Code Online (Sandbox Code Playgroud)

并且不要尝试优化断言,它们可以(并且可能应该)在生产环境中被禁用.

来自的信息 java -help

java -help | grep assertions

-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
              enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
              disable assertions with specified granularity
-esa | -enablesystemassertions
              enable system assertions
-dsa | -disablesystemassertions
              disable system assertions
Run Code Online (Sandbox Code Playgroud)