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分钟!)