2、 运算符

2.1 算术运算符

运算符和表达式
运算符:对常量或者变量进行操作的符号
表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:

	int a = 10;
	int b = 20;
	int c = a + b;

+:是运算符,并且是算术运算符
a+b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式

/:整数相除,结果只能得到整数,如果想要得到带有小数的结果,必须加入小数(浮点类型)的运算
%(取模)取余数
注意事项:
/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。

2.2 字符的“+”操作

字符的“+”操作

public class Test{
	public static void main(String[] args){
		int a = 1;
		char b = 'a';
		System.out.println(a + b); //98
	}
}

a + b的运算中,a为int类型,b为char类型
当(byte short char int)在一起运算的时候,都会提升为int之后,再进行运算
但是,char属于字符,字符是怎样提升为int数值的呢?

为什么要有这样的码表?

'a' --- 97 'A' --- 65 '0' --- 48

2.3 字符串的+操作

字符串的“+”操作
当+操作中出现字符串时,这个+是{字符串连接符},而不是算术运算。
在+操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行"+"操作时,从左到右逐个执行。

public static void main(String[] args){
	// 字符串可以使用 + 号,跟【任意数据类型】拼接
	System.out.println("qwer" + 666);
	System.out.println("qwer" + true);
	//从左到右
	System.out.println(1 + 99 + "年");
	System.out.println("5+5=" + 5 + 5); //已经变成字符串拼接了 最后就是5+5=55
	System.out.println("5+5=" + (5 + 5)); //提高运算优先级 
}

2.4 案例-数值拆分

需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

public class Test{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个三位数");
		int num = sc.nextInt();
		int ge = num % 10;
		int shi = num / 10 % 10;
		int bai = num / 100;
		System.out.println("整数"+num+"个位为:" + ge);
		System.out.println("整数"+num+"十位为:" + shi);
		System.out.println("整数"+num+"百位为:" + bai);
	}
}

公式总结:
个位:数值 % 10
十位:数值 / 10 % 10
百位:数值 / 10 /10 % 10
千位:数值 / 10 / 10 / 10 % 10

2.5 自增自减运算符

自增自减运算符
++:变量自身+1
--:变量自身-1
++和--既可以放在变量的后边,也可以放在变量的前面。
注意:单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的

public static void main(String[] args){
	int a = 10;
	++a; 
	a++;
}

参与操作:
++在前:先对该变量做自增(++)或者自减(--),然后再拿变量参与操作。
++在后:先将该变量原本的值,取出来参与操作,随后再进行自增(++),自减(--)。
++和--,只能操作变量不能操作常量

System.out.println(10++); //错误

2.6 赋值运算符

赋值运算符

注意事项:
扩展的赋值运算符隐含了强制类型转换
扩展赋值运算符:
+= -= *= /= %=

public static void main(String[] args){
	int a = 10;
	a += 20; //将符号左右两边的数据,做加分运算,结果赋值给左边
	System.out.println(a);
}

注意:

public static void main(String[] args){
	short a = 1;
	a += 1;	// a = (short)(a + 1); 注意:扩展赋值运算符底层会自带强转功能
	System.out.println(a); 
}

2.7 关系运算符

关系运算符(比较运算符)

> >=  < <= == !=
public static void main(String[] args){
	System.out.println(10 > 20); //false
}

2.8 逻辑运算符

逻辑运算符概述
在数学中,一个数据x,大于5,小于15,我们可以这样来进行表示:5<x<15。
在java中,需要把上面的式子先进行拆解,再进行合并表达。
拆解为:x>5和x<15
合并后:x>5&x<15
逻辑运算符作用:用于{整合}多个比较表达式的条件
1、连接多个比较表达式
2、连接true或false
最终得到的结果都是boolean类型的true或false
逻辑运算符分类:
&(与):并且 遇false则false,只有符号左右两边同时为true,结果才为true。
|(或):或者 遇true则true,只有符号左边两边同时为false,结果才为false。
!(非):取反 !false=true !!true=true
^(异或):相同为false,不同为true
应用场景:
需求:键盘录入学生成绩,如果是90-100之间,程序输出(优秀)
判断条件(score >= 90 & score <= 100)
需求:键盘录入工人工号,只要3号5号7号。

public static void main(String[] args){
	int x = 10;
	System.out.println(x > 5 & x < 15); 
}

&其实就是一个逻辑运算符
我们可以这样说,逻辑运算符,是用来连接关系表达式的运算符。
当然,逻辑运算符也可以直接连接布尔类型的常量或者变量。

2.9 短路逻辑运算符

短路逻辑运算符

& 和 &&的区别:
&无论符号左边是true还是false,右边都要继续执行
&&具有短路效果,符号左边为false的时候,右边就不执行了。
|和||的区别:
逻辑或|,无论左边真假,右边都要执行。
短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。

2.10 三元运算符

三元运算符
格式:关系表达式?表达式1:表达式2;
执行流程:
首先计算关系表达式的值
如果值为true,取表达式1的值
如果值为false,取表达式2的值

public static void main(String[] args){
	int a = 10;
	int b = 20;
	int max = a > b ? a : b;
	System.out.println(max);
}

2.11 案例:三个和尚

需求:一座寺庙里住着三个和尚,已知他们的升高分别为150cm、210cm、165cm。请用程序实现获取三个和尚的最高升高。

public static void main(String[] args){
	int height1 = 150;
	int height2 = 210;
	int height3 = 165;
	
	int tempMax = a > b ? a : b;
	int max = tempMax > c ? tempMax : c;
	
	System.out.println(max);
	
	int result = a > b ? a : b > c ? a > b ? a : b : c;
	System.out.println(result);
}