&和&&的区别(简单易懂)

&(按位与)和&&(逻辑与)的区别如下:

1.&&具有短路功能,而&不具有短路功能。
2.
当&运算符两侧的表达式的结果均为真时,整个运算结果才为真。
当&&操作符第一个表达式为 false时,结果为 false,并且不再计算第二个表达式。

(简单的表达就是:使用&运算符,必须两侧的都是true,结果为真。使用&&运算符,重点看第一个表达式,第一个表达式为false,后面的表达式就不会再计算(因为具有短路功能),如果第一个表达式是true,后面就会继续进行计算,直到后面全部都为true,才为真。)

为了让大家更好的理解,请看下面代码:
这里引入一下变量的命名规范!!!
变量的名字可大小写混用但首字符应小写。词由大写字母分隔,限制用下划线,限制使用美元符($),因为这个字符对内部类有特殊的含义。示例如:resultOne 。

        boolean resultOne = 1==3 & 1==1 & 2==2; //使用 &
        boolean resultTwo = 1==3 && 1==1 && 2==2; //使用 &&
        System.out.println(resultOne); //resultOne = false
        System.out.println(resultTwo); //resultTwo = false
        //当使用 & 时,要进行  1==3 & 1==1 & 2==2 的判断
        //当使用 && 时,因为 1==3 为 false,所以进行了短路的操作,后面的1==1 && 2==2 不用执行。

在很多时候我们都用到&&而不用&,例如在验证用户登录时进行时进行的判断,用户名不为空(null)也不是空字符串,代码应该写成:

userName != null && !userName.equals("");
//这里不能使用 & 运算符,顺序也不能交换,如果用户名真的为空的情况下,会报空指针异常(NullPointerException)。

userName.equals("") 如果userName为null 进行equals操作会报NullPointerException,所以我们要先判断userName不为null,在用equals判断不是空字符串。

猜你喜欢

转载自blog.csdn.net/weixin_46015018/article/details/122523030
今日推荐