说起Java中的运算符,又是老生常谈的话题了。说到运算符,就要先去了解什么是运算。简单来说,运算是对变量和常量进行操过的过程,运算符就是操作这些变量和常量过程中的符号。对于Java这个强类型语言来说,每种数据类型都有严格划分:运算符共分为算术运算符、赋值运算符、关系运算符(比较预算符)、逻辑运算符、位运算符和三目运算符(三元运算符)这几种,分别适用于不同的运算中。

1、算术运算符

小学我们都学过四则运算,而算术运算符的运算遵循四则运算规律,先算小括号,再算乘除,最后算加减。
算术运算符共包括下面这几种:
加(+)、减(-)、乘(*)、除(/)、取模(%)、自增(++)、自减(– –)。
1)加(+):共有三种用法,分别是:加法运算、表示正数和字符串连接。在运用过程中,字符串和任意类型做相加操作,其结果都是字符串。
2)++(自增):单独使用时,在原来数据的基础上自动加1,不会有任何影响,同样适用于– –(自减);
不单独使用时,“++”在前:该变量会先自增或自减,再去做其他运算;(运算包括:赋值,打印语句,小括号);
“++”在后:该变量会先做其他运算,再去自增或自减。
下面我们用一个实例来演示一下自增或自减运算。

class Demo6{
	public static void main(String[] args){
		int a = 10;
		int b = 10;
		int c = 10;
		
		a = b++;//a=10,b=11
		c = --a;//a=9,c=9
		b = ++a;//a=10,b=10
		a = c--;//a=9,c=8
		
		System.out.println(a);//9
		System.out.println(b);//10
		System.out.println(c);//8
		
		int d = 4;
		int e = (d++)+(++d)+(d*10);//d++=4,d=5;d=6,d++=6;d*10=60
		System.out.println(d);//6
		System.out.println(e);//70
	}
}

2、赋值运算符

赋值运算符包括:= , += ,-=, *= , /=, %=这几种。在这之中,“=”是基本的赋值运算符 其他都为扩展的赋值运算符。

public class Demo7{
	public static void main(String[] args){
		short s = 1;//s是short类型
		s = s +1;//s是short类型,s+1是int类型,将int赋给short可能有精度损失
		System.out.println(s);
	}
}
注:s不能输出,因为s是short类型,s+1是int类型,将int赋给short可能有精度损失.

3、比较运算符

何为比较运算符呢?简单理解,关系运算符左右两边连接起来的形成的表达式,叫做关系表达式,最终结果值都是boolean类型,不是true,就是false。而比较运算符又有:==等于、!= 不等于、>(大于) 、<(小于)、>=(大于等于)、<=(小于等于)、instanceof(判断对象于实例的关系)这么七种。
那我们举两个例子:

class Demo8{
	public static void main(String[] args){
		int a = 10;
		int b = 20;
		System.out.println(a == b);
		
		//int c = a != b;//不兼容的类型,布尔类型不能赋值/强转给int类型
		boolean c = a != b;//两边都是boolean类型
		System.out.println(c);//true
		
		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);//20
	
	}
}

下面是第二个例子

class Demo5{
	public static void main(String[] args){	
			int a = 5;
			int b = 3;
			System.out.println(a==b);//false
			System.out.println(a=b);//3
			
			int x = 10;
			int y = 10;
			boolean flag = (x == y);//true
			//boolean flag1 = (x = y);//报错,不兼容的类型
			System.out.printlln(flag);//true
			
			boolean b1 = true;
			boolean b2 = false;
			boolean b3 = (b1 == b2);//false
			boolean b4 = (b1 = b2);//false
	
	}
}

4、逻辑运算符

逻辑运算符一般用于连接两个boolean值,或者是两个能够得到boolean值的表达式(关系表达式)。
说到逻辑运算符,就不得不说短路运算符:&&和||。
&&(双与,短路与):一旦判断出符号左边表达式结果为false,那么就不再去执行后面的表达式;
|||(双或,短路或):当符号左边表达式为true,后面不再执行。

class Demo10{
	public static void main(String[] args){
		int a = 8;
		int b = 10;
		int c = 12;
		
		System.out.println(b & a);//8,与运算,转成二进制,对应位置都是1,结果是1,否则是0
		System.out.println(b | a);//10,或运算,转成二进制,有一位是1,结果是1,其余是0
		System.out.println(b ^ a);//2,异或运算,转成二进制,对应位相同为0,不同为1

		System.out.println(a++ > b && b++ > 12);//false
		System.out.println(a);//9,前面已经得到false,后面不在运行
		System.out.println(b);//10
		System.out.println("---------------------");
		
		System.out.println(a++ < b || b++ > 12);//true
		System.out.println(a);//10,//前面已经得到true,后面不在运行
		System.out.println(b);//10		
	}
}

5、位运算符

:右移:右移需要看首位是不是负数,如果是负数,那么右移以后空余出来的部分需要补1;如果首位是正数,那么右移以后,空余出来的部分需要补0。
<<:左移:移几位,相当于乘以进制的几次方。

无符号右移:不管最高位是正数还是负数,统统补0。

class Demo12{
	public static void main(String[] args){
		int a = 8;
		int b = -8;
		System.out.println(a >> 2);//2
		System.out.println(2 << 3);//8
		System.out.println(b >> 2);//-2
		System.out.println(b >>> 2);//1073741822;int类型,32位
	}
}

上边代码中,为何最后一行会如此之大呢???运行之后真的着实吓了我一跳。
追根溯源,在计算机计算过程中,始终是二进制的计算,int类型的位数是32位,而非我们平时写二进制为图省事写的八位。经过计算得到的结果就是上面的数值。
如果想要算一下原码、反码和补码的,可以翻一下我以前的内容,里面有提到。

6、三目运算符

三目运算的格式为: 关系表达式 ? 表达式1 : 表达式2;
简而言之,就是:如果关系表达式结果为true,那么就执行表达式1;
如果关系表达式结果为false,那么就执行表达式2;
表达式1和表达式2的最终结果是一个明确的答案值。

//把学习成绩>=90分的同学用A表示;80-89分的同学用B表示;70-79分的同学用C表示;60-86分的同学用D表示;60分以下的同学用E表示。

class Demo15{
	public static void main(String[] args){
		int score = 82;
		String level = score>=90?"A":score>=80?"B":score>=70?"C":score>=60?"D":"E";
		System.out.println(level);
	}
}