一.逻辑运算符
我将用代码的形式来让你理解他们两个的区别:
||和|的区别(或):
||具有短路功能,当||左边表达式为true的时候,直接判断整个||运算结果为true,||右边不再进行计算
|不具有短路功能,不管|左边表达式的结果为true还是false,|右边表达式都要进行计算
package Day004.bdqn.casus;
public class Demo01 {
public static void main(String[] args) {
huo1();
huo2();
}
public static void huo1() {
int x = 8;
int y = 9;
System.out.println((++x != y) || (++x == y));// false
System.out.println(x);// 10
int a = 8;
int b = 9;
System.out.println((++a != b) | (++a == b));// false
System.out.println(a);// 10
}
public static void huo2() {
int x = 8;
int y = 9;
System.out.println((++x == y) || (++x != y));// true
System.out.println(x);// 9
int a = 8;
int b = 9;
System.out.println((++a == b) | (++a != b));// true
System.out.println(a);// 10
}
/*
* &&和&的区别(与):
* &&具有短路功能,当&&左边表达式为false的时候,直接判断整个&&运算结果为false,&&右边不再进行计算
* &不具有短路功能,不管&左边表达式的结果为true还是false,&右边表达式都要进行计算
*
* ||和|的区别(或):
* ||具有短路功能,当||左边表达式为true的时候,直接判断整个||运算结果为true,||右边不再进行计算
* |不具有短路功能,不管|左边表达式的结果为true还是false,|右边表达式都要进行计算
*
*/
}
&&和&的区别(与):
&&具有短路功能,当&&左边表达式为false的时候,直接判断整个&&运算结果为false,&&右边不再进行计算
&不具有短路功能,不管&左边表达式的结果为true还是false,&右边表达式都要进行计算
package Day004.bdqn.casus;
public class Demo02 {
public static void main(String[] args) {
yu1();
yu2();
}
public static void yu1() {
int x = 8;
int y = 9;
System.out.println((++x != y) && (++x == y));// false
System.out.println(x);// 9
int a = 8;
int b = 9;
System.out.println((++a != b) & (++a == b));// false
System.out.println(a);// 10
}
public static void yu2() {
int x = 8;
int y = 9;
System.out.println((++x == y) && (++x != y));// true
System.out.println(x);// 10
int a = 8;
int b = 9;
System.out.println((++a == b) & (++a != b));// true
System.out.println(a);// 10
}
/*
* &&和&的区别(与):
* &&具有短路功能,当&&左边表达式为false的时候,直接判断整个&&运算结果为false,&&右边不再进行计算
* &不具有短路功能,不管&左边表达式的结果为true还是false,&右边表达式都要进行计算
*
* ||和|的区别(或):
* ||具有短路功能,当||左边表达式为true的时候,直接判断整个||运算结果为true,||右边不再进行计算
* |不具有短路功能,不管|左边表达式的结果为true还是false,|右边表达式都要进行计算
*
*/
}
二.条件运算符
条件运算符(三目运算符/三元运算符):
语法结构:
条件?表达式1:表达式2;
执行规律:
条件为true,执行表达式1
条件为false,执行表达式2
带大家做一个小练习:
public static void main(String[] args) {
/*
* 根据分解后的数字之和,判断用户是否中奖。如果数字之和大于20,则中奖
*/
// 创建Scanner类对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入4位会员卡号:");
int cardId = sc.nextInt();
System.out.println("您的会员卡号是:" + cardId);
// 获取会员卡号各个位上的数字
int geWei = cardId % 10;
int shiWei = cardId / 10 % 10;
int baiWei = cardId / 100 % 10;
int qianWei = cardId / 1000;
System.out.println("千位:" + qianWei + ",百位:" + baiWei + ",十位:" + shiWei
+ ",个位:" + geWei);
// 求各个位上的数字之和
int sum = geWei + shiWei + baiWei + qianWei;
System.out.println("会员卡号各个位上的数字之和:" + sum);
//如果数字之和大于20,则中奖
String result = sum > 20 ? "恭喜你,中奖了" : "很遗憾,没能中奖";
System.out.println(result);
}
那么我输入一个数的时候会发生什么:
什么?没有难度?来,我们来搞个进阶版。
嵌套条件运算符:
语法规则:
条件1?(条件2?表达式1:表达式2):(条件3?表达式3:表达式4);
执行规律:
条件1为true,继续判断条件2,条件2为true,执行表达式1,条件2为false,执行表达式2
条件1为false,继续判断条件3,条件3为true,执行表达式3,条件3为false,执行表达式4
看不懂?不要怕,我会用代码来向你展示。
public static void main(String[] args) {
//获取3个数中的最大值或者最小值
int a = 10;
int b = 30;
int c = 20;
int max =a>b?(a>c?a:c):(b>c?b:c);
System.out.println("最大值:"+max);
int min = a>b?(b>c?c:b):(a>c?c:a);
System.out.println("最小值:"+min);
}
看这个,记得结合前面的看,不然一不小心就会乱套了。
如果还有人不懂运算符的可以到我之前写的里面去看看。