很抱歉,如果这是一个愚蠢的问题,但我在java编程方面有点新鲜。
我有一个存储在线程中的布尔值,我不知道它是真还是假。
我有一个方法setBooleanTrue()
设置布尔值true
,但如果布尔值已经true
怎么办?它会将布尔值再次设置为true
?
因此我想问你是否应该添加以下控件:
if(!testboolean)
testboolean=true;
感谢。
答案 0 :(得分:1)
如果您对通过添加条件而节省的时间感兴趣,请看一下:
下面我已经写出了你的代码的两个版本,以及相应生成的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
的直接重新分配会产生较少的字节码。
起初,这似乎就是答案。不幸的是,它并不那么简单。请参阅运行时环境执行这个名为branch prediction的奇特事情。如果连续运行一行代码,JVM将尝试预测"有条件的结果。
这可能是一件非常好的事情,或者是一件非常糟糕的事情。您boolean
的预期值,快速连续检查的次数以及是否可能通过多次调用保持特定值将决定是否应添加条件语句。
答案 1 :(得分:-1)
当您为任何变量赋值时,变量当前值不会被评估,它只是将变量设置为您想要的值。因此,在将bool设置为true之前,无需检查bool是真还是假。如果它是真的它会保持真实,如果它是假的它将成为现实。