JAVA 基础之运算符
算术运算符
算术运算符就是我们所熟知的加、减、乘、除运算符和取余运算符,但它与平时所用的有所不同。
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 操作数均为数值型的数据,+用于数值的计算,若有一端为字符型,+用于拼接字符 |
- | 减 | 操作数必须为数值型的数据,字符不能参与 |
* | 乘 | 操作数必须为数值型的数据,字符不能参与 |
/ | 除 | 操作数必须为数值型的数据,字符不能参与,两个整数相除,结果保留整数部分。 |
% | 取余 | 用于两数相除,取余数,商永远是整数,所以小数也能求余数。 |
注意:
- 算术运算符需要两个操作数参与
- 多个符号参与运算,遵循四则运算规则,先乘除后加减
- 多种数据类型参与运算时,运算结果以所有参与运算的操作数中所占字节最大的的类型为准
System.out.println(7/3+2*5%3.0);//2+1.0=3.0
关系运算符
关系运算符用来对操作数的关系进行比较
符号 | 作用 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于(=必须在后边) |
<= | 小于等于(=必须在后边) |
== | 等于 |
!= | 不等于 |
注意:
-
关系运算符需要两个操作数参与
-
=与==的区别
- =用于赋值
- ==用于比较两个原始类型的值或引用类型的内存地址
- 比较原始类型时,可以使用==
- 比较引用类型时(特别是字符串),不要使用==,==比较的是内存地址,不是值,比较值可以用
eqauls()
方法
-
关系运算的结果为boolean,布尔值
逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | and与 | 符号两端需要两个逻辑表达式。判断符号两边的式子,如果结果都为true,整体结果为true,如果有一个结果为false,整体结果就为false。 |
|| | or或 | 符号两端需要两个逻辑表达式。判断符号两边的式子,如果结果都为false,整体结果为false,如果有一个结果为true,整体结果就为true。 |
! | 非 | 单目运算符:只有一个表达式参数运算。!表达式表示将原表达式的结果取相反 |
位运算符
符号 | 作用 |
---|---|
& | 按位与。在结果上与&&无区别。但&&是短路运算,有可能不会执行第二个表达式,&两个表达式都会执行。 |
| | 按位或。在结果上与||无区别。但||是短路运算,有可能不会执行第二个表达式,|两个表达式都会执行。 |
^ | 按位异或。将操作数转换为二进制后,按位比较,如果相同结果为0,不同结果为1,最终二进制结果转换为十进制 |
>> | 按位右移。将第一个操作数转换为二进制后,向右移动第二个操作数对应的位数,再将结果转换为十进制 |
<< | 按位左移。将第一个操作数转换为二进制后,在后边补充第二个操作数对应的0,再将结果转换为十进制 |
//按位异或:将操作数转换为二进制后,按位比较,如果相同结果为0,不同结果为1,最终二进制结果转换为 十进制
//3 011
//5 101
// 110---6
System.out.println(3^5);//6
//按位右移:将第一个操作数转换为二进制后,向右移动第二个操作数对应的位数,再将结果转换为十进制
//110 >> 11--3
System.out.println(6>>1);//3
//按位左移:将第一个操作数转换为二进制后,在后边补充第二个操作数对应的0,再将结果转换为十进制
//101 << 1010--10
System.out.println(5<<1);
注意:
- &&、||和&、|在结果上没有区别,但是&&和||是短路运算,如果能通过第一个式子决定最终的结果,则不用判断第二个式子。&和|则不会短路,会将两个式子都执行。
- 所以实际应用中,使用&&和||提高代码执行效率
赋值、复合赋值运算符
符号 | 作用 |
---|---|
= | 赋值运算符。将符号右侧的内容赋值给左侧的变量,保证能被保存。 |
+= | 复合赋值运算符。a+=3相当于a=a+3; |
-= | 复合赋值运算符。a-=3相当于a=a-3; |
*= | 复合赋值运算符。a*=3相当于a=a*3; |
/= | 复合赋值运算符。a/=3相当于a=a/3; |
%= | 复合赋值运算符。a%=3相当于a=a%3; |
注意:
- 复合赋值运算的流程是:
- 将符号两侧的操作数进行对应的算术运算后,将结果赋值给符号左侧的变量中。
int a=3;
a*=3+2;//相当于a=a*(3+2),结果为15
自增、自减运算符
符号 | 作用 |
---|---|
++ | 将结果+1 |
– | 将结果-1 |
注意
-
只能有一个操作数参与运算,是单目运算符
-
a++或++a相当于a+=1或a=a+1。–同理
-
如果++或–独立成行使用,无论符号在前在后,都将结果+1或-1
int a=3; a++;//或++a System.out.println(a);//4
-
如果++或–与其他事情配合使用
-
符号在前,先+1或-1计算后再使用
-
符号在后,先使用后再+1或-1计算
int a=3; if(a++>3){//符号在后,先使用,即3>3不成立。 //do something } System.out.println(a);//a最终还是会+1,4 int b=4; if(--b==3){//符号在前,先计算,即3==3成立 //do something } System.out.println(b);//3
-
条件运算符
表达式一?表达式二:表达式三
注意:
-
三目运算符,有三个操作数参与。是一个简化版的双分支条件语句。
-
首先运算表达式一,如果结果为true,执行问号后的表达式二,如果结果为false,执行冒号后的表达式三
-
整个表达式的最终结果为表达式二或表达式三。
使用条件运算符判断闰年
//输出一个年份是否为闰年:四年一闰,百年不闰,四百年再闰
//闰年能被4整除且不能被100整除,或能被400整除
int year = 1900;
String res = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? "是闰年" : "是平年";
System.out.println(year + "年" + res);
运算符之间的优先级
小括号>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>赋值运算符