小编典典

在没有If语句的情况下将Java中的布尔值转换为整数

java

我想知道是否有一种方法可以将布尔值转换为int而不使用if语句(以免破坏管道)。例如,我可以写

int boolToInt( boolean b ){
  if ( b )
    return 1
  return 0

但是我想知道是否有一种方法可以不使用if语句,例如Python的

bool = True 
num = 1 * ( bool )

我也觉得你可以做

boolean bool = True;
int myint = Boolean.valueOf( bool ).compareTo( false );

但是,这会创建一个额外的对象,因此它确实很浪费,而且我发现它比if语句方式还要慢(它不一定效率低下,只是有一个弱点)。


阅读 208

收藏
2020-11-13

共1个答案

小编典典

除了if外,不能使用布尔值。但是,这并不意味着在装配级别将有一个分支。

如果检查该方法的编译代码(顺便说一句,使用return b ? 1 : 0;完全相同的指令进行编译),您将看到它不使用跳转:

0x0000000002672580: sub    $0x18,%rsp
0x0000000002672587: mov    %rbp,0x10(%rsp)    ;*synchronization entry
0x000000000267258c: mov    %edx,%eax
0x000000000267258e: add    $0x10,%rsp
0x0000000002672592: pop    %rbp
0x0000000002672593: test   %eax,-0x2542599(%rip)        # 0x0000000000130000
                                                ;   {poll_return}
0x00000000025b2599: retq

注意:这是在热点服务器7上-在不同的VM上可能会得到不同的结果。

2020-11-13