【问题标题】:What is the quickest way to flip a Java boolean? [closed]翻转Java布尔值的最快方法是什么? [关闭]
【发布时间】:2016-04-23 23:57:45
【问题描述】:

哪种方式更快,资源消耗更少:

boolean = !boolean
boolean ^= boolean

编辑:这不是一个基于意见的问题。有一个正确的答案。

【问题讨论】:

  • 这是一个毫无意义的纳米优化。写出最易被普通人理解的内容。
  • 这不是一个合法的问题。它甚至是重复的stackoverflow.com/questions/224311/…
  • 在任何情况下都无关紧要。
  • 我看不出这些知识有什么实际用途(如果你有,请发帖),但作为一个普遍的好奇心,这似乎是一个 ok 问题。很清楚,有一个代码示例,答案不是见仁见智。我也不明白为什么它有这么多反对意见
  • @Idos 它不是重复的。您的链接没有给出这个问题中两个运算符中哪一个需要较低性能的答案。

标签: java boolean xor


【解决方案1】:

我用以下代码测量。

public static void main(String[] args)
{

    boolean myVariable = true;
    long startTime = 0;
    long endTime = 0;
    long duration1 = 0;
    long duration2 = 0;


    for(int i=0; i<1000; i++) {
        startTime = System.nanoTime();
        myVariable = !myVariable;
        endTime = System.nanoTime();

        duration1 += (endTime - startTime);


        startTime = System.nanoTime();
        myVariable ^= myVariable;
        endTime = System.nanoTime();

        duration2 += (endTime - startTime);

    }

        System.out.println("The duration for the first operation is :" + (duration1/1000));
        System.out.println("The duration for second operation is :" + (duration2/1000));
}

结果是(以纳秒为单位)

第一次操作的持续时间是:140

第二次操作的持续时间是:123

基于此分析,布尔值 ^= boolean 比 boolean = !boolean 更快。

【讨论】:

  • 我想如果你先做boolean ^= boolean,那么boolean = !boolean会更快。
  • @Jakuje boolean ^= boolean 已经更快了。我改变了他们的位置,布尔值 ^= 布尔值仍然更快。
  • 好的。这是试图与 java 开玩笑。但是,是的,这是有道理的。
  • @Jakuje :) 当我改变他们的位置时, boolean ^= boolean 在 78 纳秒和其他 115 纳秒内完成。当然,这取决于本地机器的能力,但不知何故,我们应该相信统计数据:)
  • 优秀的测试!谢谢你的代码。我最近才发现 Xor boolean swap 并且很好奇哪个会更好..即使它在纳秒内。
【解决方案2】:

boolean = !boolean 可能更好,因为它更易于阅读。两者都不是资源密集型的,因此使用其中任何一个都不会真正对性能产生真正的影响。

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2020-01-17
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多