Converting Boolean to Integer in Java without If-Statements(在没有 If 语句的情况下在 Java 中将布尔值转换为整数)
问题描述
我想知道是否有一种方法可以在不使用 if 语句的情况下将布尔值转换为 int(以免破坏管道).例如,我可以写
I'm wondering if there's a way to convert a boolean to an int without using if statements (as not to break the pipeline). For example, I could write
int boolToInt( boolean b ){
if ( b )
return 1
return 0
但我想知道是否有办法在没有 if 语句的情况下做到这一点,就像 Python 的
But I'm wondering if there's a way to do it without the if statement, like Python's
bool = True
num = 1 * ( bool )
我也觉得你可以做
boolean bool = True;
int myint = Boolean.valueOf( bool ).compareTo( false );
不过,这会创建一个额外的对象,所以它真的很浪费,我发现它甚至比 if 语句方式还要慢(这不一定是低效的,只是有一个弱点).
This creates an extra object, though, so it's really wasteful and I found it to be even slower than the if-statement way (which isn't necessarily inefficient, just has the one weakness).
推荐答案
你不能在 if 中使用布尔值.但这并不意味着在汇编级别会有分支.
You can't use a boolean other than in a if. However it does not mean that there will be a branch at the assembly level.
如果您检查该方法的编译代码(顺便说一下,使用 return b ? 1 : 0;
编译为完全相同的指令),您会发现它没有使用跳转:
If you check the compiled code of that method (by the way, using return b ? 1 : 0;
compiles to the exact same instructions), you will see that it does not use a jump:
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 上得到不同的结果.
Note: this is on hotspot server 7 - you might get different results on a different VM.
这篇关于在没有 If 语句的情况下在 Java 中将布尔值转换为整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在没有 If 语句的情况下在 Java 中将布尔值转换为整数
基础教程推荐
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 降序排序:Java Map 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01