【问题标题】:Control before setting a boolean?在设置布尔值之前进行控制?
【发布时间】:2017-10-10 10:43:08
【问题描述】:

对不起,如果这是一个愚蠢的问题,但我是 java 编程的新手。

我有一个布尔值存储在一个线程中,我不知道它是真还是假。

我有一个方法setBooleanTrue() 设置布尔值true,但是如果布尔值已经是true 怎么办?它将再次将布尔值设置为true?

出于这个原因我想问你是否应该添加以下控件:

if(!testboolean)
    testboolean=true;

谢谢。

【问题讨论】:

  • 你想达到什么目的,你想切换布尔值吗?
  • 没有。如果truetrue 覆盖,会出现什么问题?
  • @AmerQarabsa 以避免不必要的设置。
  • @Jens 完全没问题。只是为了避免不必要的设置。
  • 不要担心之前的值,它会消失无痛。而且条件可能比实际设置需要更多的过程

标签: java boolean controls


【解决方案1】:

当您为任何变量赋值时,变量的当前值不会被评估,它只是将变量设置为您想要的值。因此,在将 bool 设置为 true 之前,无需检查 bool 是 true 还是 false。若为真则为真,若为假则为真。

【讨论】:

    【解决方案2】:

    如果您对添加条件所节省的时间感兴趣,请查看以下内容:

    下面我已经写出了你的代码的两个版本,以及相应的生成的 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 的期望值、快速连续检查的次数以及是否可能通过多次调用保持一定值将决定您是否应该添加条件语句。

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多