& 和 && 的区别
2018-03-12 16:03
197 查看
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。
&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。
很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。
&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。
很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
相关文章推荐
- '\r' 与 '\n'的区别
- a 和&a的区别
- <iframe>和<frame>的区别是什么?
- <jsp:include>和<%@include%>的区别
- php逻辑运算符 && 和&区别
- "*.py"和"*.pyw"的区别
- <context:component-scan/>和<mvc:annotation-driven/>的区别
- &和&&的区别
- &与&&有什么区别?
- <context-param>与<init-param>的区别与作用
- php中的<?= ?>和<?php ?>的区别
- &与&&运算的区别?
- &&与&区别
- <context:annotation-config/>和context:component-scan的区别
- <同步,异步>与<阻塞,非阻塞>的区别?
-  和 的区别
- js中的"=="和equals()以及is()三者的区别
- &和&&的区别
- <string> 与<string.h>、<cstring>的区别
- <%@ include file=""%>与<jsp:include page=""/>区别