我想知道是否有一种方法可以将布尔值转换为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;完全相同的指令进行编译),您将看到它不使用跳转:
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上可能会得到不同的结果。