java “&”和“&&”的区别

本文详细解析了Java中逻辑运算符“&”、“&&”、“|”、“||”的使用区别,通过具体实例展示了单个与双逻辑运算符在运算过程中的行为差异,特别是短路原理的应用。

“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。(短路原理)。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

实例1,单个&

public static void main(String[] args) {
		
		String str = null;
		if(1>2 & str.equals("abc")){
			System.out.println("aaaaaaaa");
		}else{
			System.out.println("bbbbbbbb");
		}
		
	}

结果:

str.equals("abc")参与了运算,因为str为null,所以会报空指针异常,当然如果写成"abc".equals(str)就能避免空指针异常了。

实例2,双&

	public static void main(String[] args) {
		
		String str = null;
		if(1>2 && str.equals("abc")){//此处 str.equals("abc")没有执行
			System.out.println("aaaaaaaa");
		}else{
			System.out.println("bbbbbbbb");
		}
		
	}

结果:

### Java&&&运算符的区别Java中,`&``&&`都是逻辑运算符,但它们的行为存在显著差异。以下是两者的具体区别: #### 1. 短路行为 `&&`是短路逻辑与运算符,这意味着如果第一个条件为`false`,则第二个条件不会被评估,因为整个表达式的结果已经确定为`false`[^2]。例如: ```java int x = 3; int y = 4; System.out.println((++x == 3) && (++y == 4)); // 输出 false System.out.println("x=" + x); // x=4 System.out.println("y=" + y); // y=4 ``` 在这个例子中,由于`++x == 3`为`false`,因此`++y == 4`不会被执行。 相比之下,`&`是非短路逻辑与运算符,即使第一个条件为`false`,它也会继续评估第二个条件[^2]。例如: ```java int x = 3; int y = 4; System.out.println((++x == 3) & (++y == 4)); // 输出 false System.out.println("x=" + x); // x=4 System.out.println("y=" + y); // y=5 ``` 这里,即使`++x == 3`为`false`,`++y == 4`仍然会被执行。 #### 2. 使用场景 `&&`通常用于需要短路逻辑的场景,以避免不必要的计算或潜在的错误。例如,在检查数组索引是否越界时: ```java if (index >= 0 && index < array.length) { System.out.println(array[index]); } ``` 如果使用`&`而不是`&&`,即使`index >= 0`为`false`,`index < array.length`仍会被计算,这可能导致`NullPointerException`或其他异常。 另一方面,`&`适用于需要对两个条件都进行评估的情况,尽管这种情况较少见。例如,在位操作或某些特定逻辑条件下可能需要用到`&`。 #### 3. 运算优先级 逻辑运算符的优先级为:`!`运算级别最高,`&&`运算高于`||`运算,而`&``|`的优先级低于`&&``||`[^3]。此外,逻辑非(`!`)具有右结合性,而逻辑与(`&&`)逻辑或(`||`)具有左结合性。 ### 示例代码 以下代码展示了`&``&&`的区别: ```java public class LogicalOperatorsExample { public static void main(String[] args) { int a = 0; int b = 5; if ((a != 0) && (b++ > 4)) { // 使用 && System.out.println("Condition met with &&"); } System.out.println("b after &&: " + b); // 输出 b=5 if ((a != 0) & (b++ > 4)) { // 使用 & System.out.println("Condition met with &"); } System.out.println("b after &: " + b); // 输出 b=6 } } ``` #### 输出结果 ``` b after &&: 5 b after &: 6 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值