java运算符 "&" 和 "&&" 的区别及 "|" 和 "||" 的理解和区别

 

一、java符号理解

1、“&”: 按位与。

2、“|”:按位或。

3、“&&”:逻辑与。

4、“||”:逻辑或。

 

二、代码理解"&" 和 "&&" 及 "|" 和 "||" 的区别

1、定义两个方法 out 和 out2 ,分别向控制台输出一句话

private  static boolean  out (boolean bool) {
	System.out.println("method out execute ... ");
	return bool ; 
}
	
private  static boolean  out2 (boolean bool) {
	System.out.println("method out2 execute ... ");
	return bool ; 
}

 

2、创建关于 "&" 和 "&&" 的测试方法

/**
 * description: 单 & 添加测试。 --- 第一个 false, 还会执行第二个
 * @param b1
 * @param b2
* @version v1.0
 * @author w
* @date 2019年5月4日 下午12:06:02
*/
public static void testOne(boolean b1 ,  boolean b2) {
	if(out(b1) & out2(b2)) {
		System.out.println("满足条件,方法执行啦!");
	}else {
		System.out.println("不满足条件~");
	}
}
	
/**
 * description: 双 && 添加测试。 --- 第一个 false, 第二个不会执行。
 * @param b1
 * @param b2
 * @version v1.0
 * @author w
 * @date 2019年5月4日 12:06:39
 */
public static void testTwo(boolean b1 ,  boolean b2) {
	if(out(b1) && out2(b2)) {
		System.out.println("满足条件,方法执行啦!");
	}else {
		System.out.println("不满足条件~");
	}
}

 

3、创建关于“|”和“||”的测试方法

/**
 * description:单 | 添加测试。 --- 第一个 true,第二个还是会执行。
 * @param b1
 * @param b2
 * @version v1.0
 * @author w
 * @date 2019年5月4日 12:06:39
 */
public static void testThree(boolean b1 ,  boolean b2) {
	if(out(b1) | out2(b2)) {
		System.out.println("满足条件,方法执行啦!");
	}else {
		System.out.println("不满足条件~");
	}
}
	
/**
 * description:双 || 添加测试。 --- 第一个 true,第二个不会执行了。
 * @param b1
 * @param b2
 * @version v1.0
 * @author w
 * @date 2019年5月4日 12:06:39
 */
public static void testFour(boolean b1 ,  boolean b2) {
	if(out(b1) || out2(b2)) {
		System.out.println("满足条件,方法执行啦!");
	}else {
		System.out.println("不满足条件~");
	}
}

4、测试

public static void main(String[] args) {
	testOne(true,false); // out , out2 都会输出
	testOne(false,true); // out , out2 都会输出
	testTwo(true,false); // out , out2 都会输出
	testTwo(false,true); // out 输出 , out2 不会输出 ---> 双&&,第一个false,第二个不会执行。
	
	System.out.println("-----------  分隔线 ----------------");	
	testThree(true,false); // out , out2 都会输出。
	testThree(false,true); // out , out2 都会输出。
	testFour(true,false); // out输出,out2不会输出。---> 双||,第一个true,第二个不会执行。
	testFour(false,true); // out , out2 都会输出。
}

 

5、执行结果略,请自行尝试。

 

三、总结

1、相同点:

  • 按位与 & 和 逻辑与&& 要求所有条件都是 true 才会满足条件执行。
  • 按位或 | 和 逻辑或 || 要求任意条件是 true ,就可以满足条件执行。

 

2、区别:

  • 按位与&,遇到 false 条件时,还会继续执行后续判断;逻辑与 && 遇到 false 条件时,不会继续执行后续判断。整个表达式已经不满足条件了,&& 比 & 效率会更高!
  • 按位或|,遇到 true 条件时,还会继续执行后续判断;逻辑或 || 遇到 true 条件时,不会继续后续判断。 整个表达式已经满足条件了,|| 比 | 效率高!

 

四、补充-- java运算符优先级理解(从高到低)

 

java运算符优先级

优先级

描述

运算符

1

括号

()、[]

2

正负号

+、-

3

自增自减,非

++、--、!

4

乘除,取余

*、/、%

5

加减

+、-

6

移位运算

<<、>>、>>>

7

大小关系

>、>=、<、<=

8

相等关系

==、!=

9

按位与

&

10

按位异或

^

11

按位或

|

12

逻辑与

&&

13

逻辑或

||

14

条件运算

?:

15

赋值运算

=、+=、-=、*=、/=、%=

16

位赋值运算

&=、|=、<<=、>>=、>>>=

 

五、来个测试题

private static void compare() {
	String s1 = "ha";
	String s2 = "ha";
	System.out.println("haha: "+ s1==s2);
}

(PS:做错了,请再看一遍 四,并面壁思索10分钟!)