粗略的讲解"|","||","&","&&"
先来看一道题,以下代码输出为多少,哪些会短路?
@Test
public void test01() {
if (true & (3 / 0 == 0)) {
System.out.println("&");
}
}
@Test
public void test02() {
if (true && (3 / 0 == 0)) {
System.out.println("&&");
}
}
@Test
public void test03() {
if (true | (3 / 0 == 0)) {
System.out.println("|");
}
}
@Test
public void test04() {
if (true || (3 / 0 == 0)) {
System.out.println("||");
}
}
答案:只有test04能正常执行
解析:当我们使用一个"|“或”&“的时候,无论前面是正确与否,后面的判断条件都会执行,不会造成短路。
可能造成短路的是”||“和”&&"这两个。我们看一下以下代码
@Test
public void test05(){
if (true||(3/0==2)){
System.out.println("aa");
}
}
上面这段代码,不难看出if语句的后半段是除0异常,因为中间的判断为"||"(或),所以如果想要不报错,前面要为true,也就是当判断语句为或的时候,前面正确就不会执行后面语句,直接运行if语句中的代码,当然如果前面为false,就会判断后面的内容
@Test
public void test06(){
if (false&&(3/0==2)){
System.out.println("aa");
}else {
System.out.println("bb");
}
}
上面的代码,后半句也是除0异常,因为中间的是"&&"(并且),所以如果想跳过后面的异常前半句应该为false,并且(一假为假),当前面为false的时候,就不会判断后面的语句,直接跳到else中的代码,当前面判断为true的时候,就会判断后面的内容,造成除0异常。
除了if判断还有while中的判断,以上理论均适用