/**
* 操作运算符
* 1:算数运算(一元运算、二元运算)
* 2:赋值运算
* 3:关系运算
* 4:幂运算
* 5:逻辑运算
* 6:短路运算
* 7:扩展赋值运算
* 8:三目运算(条件运算&三元运算)
*/
public class Operator {
int a = 10;
int b = 20;
public static void main(String[] args) {
Operator operator = new Operator();
int a = operator.a;
int b = operator.b;
//算数运算
//一元运算符(单个单元操作,本身)++ -- 自增 自减
// a++ (a = a + 1); b-- (b = b - 1);
//a++,下面输出10,这行代码走完后,a才会+1
System.out.println(a++);
//此时输出变成11
System.out.println(a);
//--b,输出的时候已经变成20-1 = 19了;
System.out.println(--b);
//先给c赋值,然后自己自增,此时a为11,c也是输出11
int c = a++;
System.out.println(c);//11
//先自减,再赋值,19-1 = 18,d = 18
int d = --b;
System.out.println(d);
//二元运算符 (两个单元操作)
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
//两个int类型会输出0
System.out.println(a / b);
//强转为double 输出正常0.5
System.out.println(a / (double) b);
//b余a 10%20 = 0,取余,也叫 模运算
System.out.println(b % a);
//16%5 = 3 余 1,输出1
System.out.println(16 % 5);
//赋值运算
int num = 10;
//关系运算符,返回正确错误
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);
System.out.println(a == b);
System.out.println(a != b);
//幂运算,2^3,2的三次方 2³ = 2 * 2 * 2 = 8
//很多时候,我们会使用工具类来进行数据操作
System.out.println(Math.pow(2, 3));
//逻辑运算
//与(&&)并且、 或(||)或者、 非(!)取反
boolean flag1 = true;
boolean flag2 = false;
/*逻辑与运算
* && 两个都为真,结果才是真(判断到第一个比较是假,则直接返回假,也就是直接短路)
* || 两个有一个真,结果就是真(判断到第一个是真,则直接返回真)
* ! 如果是真,则为假,如果是假则为真(取反)
* */
System.out.println("flag1 && flag2:" + (flag1 && flag2));//false
System.out.println("flag1 || flag2:" + (flag1 || flag2));//true
System.out.println("flag2 || flag1:" + (flag2 || flag1));//true
System.out.println("!(flag1 && flag2):" + !(flag1 && flag2));//true
//短路运算(测试&&、||遇到第一个真假后是否会直接返回)
int testNum = 9;
//当第一个条件不满足时,&&会直接返回false,后面的不做判断
boolean test1 = (testNum < 4) && (testNum++<10);
System.out.println(test1);//false
System.out.println(testNum);//输出9,说明 9 < 4 是假的,直接就返回false,testNumOne++没有执行
//当第一个条件满足时,后面的判断才会进行,当第一第二条件同时满足时,返回true
// boolean test2 = (testNum < 11) && (testNum++<10);
// System.out.println(test2);//true, 9 < 11 true,testNum++运行完才会+1,所以此时还是9,9<10 true,都符合,返回true
// System.out.println(testNum);//输出9+1 = 10
//换成++testNum
boolean test2 = (testNum < 11) && (++testNum<10);
System.out.println(test2);//false,因为++9=10,10<10是false
System.out.println(testNum);//输出10
//扩展赋值运算符
int a1 = 10;
int b1 = 20;
System.out.println(a1+=b1); //a1 = a1 + b1 输出30
System.out.println(a1-=b1); //a1 = a1 - b1 此时a1 = 30, 30 -20 = 10
System.out.println(a1*=b1); //a1 = a1 * b1 此时a1 = 10,10 * 20 = 200
System.out.println(a1/=b1); //a1 = a1 / b1 此时a1 = 200,200 / 20 = 10
//字符串连接符
System.out.println(""+a1+b1);//输出1020 String在前面,后面的开始拼接字符
System.out.println(a1+b1+"");//输出30 String在最后面,前面的开始计算,不拼接
System.out.println(a1+""+b1);//输出1020 String在中间,也是开视拼接
//条件运算符(三元运算符)
// x ? y : z
//如果x是true的话,结果为y,否则为z
int salary = 10000;
String str = salary < 12000 ? "工资不够花" : "工资够花";
System.out.println(str);//10000<12000,条件满足,则输出工资不够花
}
}