• 巧妙运用 按位或“|” 运算


    “按位或” 运算的巧妙运用

    今天在学习Collections的源码时,看到下面的代码,联系之前自己写的程序,感受到下面这段代码确实巧妙:

    1     public static <T> boolean addAll(Collection<? super T> c, T... elements) {
    2         boolean result = false;
    3         for (T element : elements)
    4             result |= c.add(element);
    5         return result;
    6     }

    下面简单介绍:

    “T... elements” :可变参数列表,元素为泛型T或T的子类。

    “|=”:这是类似于“+=”这样的运算式,是A = A + B这种形式的简写A+=B;它们是等价的。或“|”运算,二进制运算是同“0”为“0”,否则为“1”。逻辑或“|”,同假为假否则为真。

    1 false |= false  =>  结果为false2 true |= false   =>  结果为true;
    3 false |= true   =>  结果为true;
    4 true |= true    =>  结果为true;

    在第一段代码中,2号 boolean result = false; 通过后面的运算,只要有一次c.add(element)的运算其中一次返回true,则整个方法的返回值就是true.——个人感觉精妙之处在于此(略显少见多怪)

    延伸

    逻辑与“&&” 运算

    若我们的需求为:只要有一次失败,整体返回失败。只要有一次为假,则都为假。

     1 public class Test {
     2 
     3     public static boolean change(boolean... params){
     4         boolean result = true;
     5         for (boolean temp : params) {
     6             result = result && temp;
     7         }
     8         return result;
     9     }
    10     
    11     public static void main(String[] args) {
    12         System.out.println(Test.change(true, false));        // false
    13         System.out.println(Test.change(false, false));       // false
    14         System.out.println(Test.change(true, true));         // true
    15     }
    16 }
  • 相关阅读:
    linux学习笔记--20150122
    破解LR11 sentinel stage failed
    Linux部署环境初学(Resin、jdk)
    MongoDB操作
    TestNG
    在iOS8 下用Swift 创建自定义的键盘
    iOS 8下简单,可交互式的通知
    设计模式:策略模式
    用Swift创建一个自定义,可调整的控件
    iOS7状态栏上有趣的渐变遮罩
  • 原文地址:https://www.cnblogs.com/bridgestone29-08/p/7684390.html
Copyright © 2020-2023  润新知