java - 在没有 If 语句的情况下在 Java 中将 boolean 值转换为整数

标签 java if-statement casting integer boolean

我想知道是否有一种方法可以在不使用 if 语句的情况下将 boolean 值转换为 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 语句方式还要慢(这不一定是低效的,只是有一个弱点)。

最佳答案

您不能在 if 中使用 boolean 值。但这并不意味着在汇编级别会有分支。

如果您检查该方法的编译代码(顺便说一下,使用 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 上得到不同的结果。

关于java - 在没有 If 语句的情况下在 Java 中将 boolean 值转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16868196/

相关文章:

java - 从数组中删除左侧重复项

java - 为什么我的中间存储库接口(interface)从 Spring Data JPA 1.4.x 升级到更新版本(例如 1.7.1)后会出现问题?

if-statement - Helm chart 中的 if 子句

java - 类型转换 List<ChildClass> 到 List<BaseClass>

java - 获取每周温度 - ArrayList 问题

java - 菲利克斯/OSGi : How to use SCR components that are not OSGi services?

performance - 在 OCaml 模式匹配中哪个更好, `when` 或 `if-then-else` ?

syntax - 在 Crystal Reports 中嵌套 if else

c - 类型 X 和 X 在结构/union 方面有何不同?

c++ - 问题向下转换到子类,多态性不起作用