在Java中如何不使用if-语句将布尔值转换为整数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (93)

我想知道是否有一种方法可以将布尔值转换为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语句方式慢(这并不一定是效率低下,只是有一个缺点)。

提问于
用户回答回答于
用户回答回答于

你不能在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  

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励