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

2022-09-02 05:21:50

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

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语句方式还要慢(这不一定是低效的,只是有一个弱点)。


答案 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 上获得不同的结果。


答案 2

使用 ?: 运算符:( b ? 1 : 0 )