在设置布尔值之前进行控制?
Control before setting a boolean?
抱歉,如果这是一个愚蠢的问题,但我是 java 编程的新手。
我在线程中存储了一个布尔值,但我不知道它是真还是假。
我有一个设置布尔值 true
的方法 setBooleanTrue()
,但是如果布尔值已经是 true
怎么办?它会再次将布尔值设置为 true
?
因此我想问问你是否应该添加以下控件:
if(!testboolean)
testboolean=true;
谢谢。
当您为任何变量赋值时,不会计算变量的当前值,它只是将变量设置为您想要的值。因此,在将布尔值设置为 true 之前无需检查它是 true 还是 false。如果它是真的,它会保持真实,如果它是假的,它会变成真的。
如果您对通过添加条件语句节省的时间量感兴趣,请看一下:
下面我写出了你的代码的两个版本,以及相应生成的 java 字节码。
boolean b = true;
if(!b)
b=true;
0: iconst_1
1: istore_1
2: iload_1
3: ifne
6: iconst_1
7: istore_1
8: return
boolean b = true;
b=true;
0: iconst_1
1: istore_1
2: iconst_1
3: istore_1
4: return
如您所见,boolean
的直接重新分配生成的字节码较少。
乍一看,这似乎是答案。不幸的是,事情并没有那么简单。请参阅 运行time 环境做这个叫做 branch prediction 的奇特事情。如果一行代码连续 运行,JVM 将尝试 "predict" 条件的结果。
这可能是一件好事,也可能是一件坏事。你对boolean
的期望值、快速连续检查的次数以及是否有可能通过多次调用保持一定的值将决定你是否应该添加条件语句。
抱歉,如果这是一个愚蠢的问题,但我是 java 编程的新手。
我在线程中存储了一个布尔值,但我不知道它是真还是假。
我有一个设置布尔值 true
的方法 setBooleanTrue()
,但是如果布尔值已经是 true
怎么办?它会再次将布尔值设置为 true
?
因此我想问问你是否应该添加以下控件:
if(!testboolean)
testboolean=true;
谢谢。
当您为任何变量赋值时,不会计算变量的当前值,它只是将变量设置为您想要的值。因此,在将布尔值设置为 true 之前无需检查它是 true 还是 false。如果它是真的,它会保持真实,如果它是假的,它会变成真的。
如果您对通过添加条件语句节省的时间量感兴趣,请看一下:
下面我写出了你的代码的两个版本,以及相应生成的 java 字节码。
boolean b = true;
if(!b)
b=true;
0: iconst_1
1: istore_1
2: iload_1
3: ifne
6: iconst_1
7: istore_1
8: return
boolean b = true;
b=true;
0: iconst_1
1: istore_1
2: iconst_1
3: istore_1
4: return
如您所见,boolean
的直接重新分配生成的字节码较少。
乍一看,这似乎是答案。不幸的是,事情并没有那么简单。请参阅 运行time 环境做这个叫做 branch prediction 的奇特事情。如果一行代码连续 运行,JVM 将尝试 "predict" 条件的结果。
这可能是一件好事,也可能是一件坏事。你对boolean
的期望值、快速连续检查的次数以及是否有可能通过多次调用保持一定的值将决定你是否应该添加条件语句。