3.运算符
1.算术运算符
1.基本运算符:加减乘除模(+ - * / %)
int a = 2; int b = 1; System.out.println(a + b);//3 System.out.println(a - b);//1 System.out.println(a * b);//2 System.out.println(b / a);//0 int/int结果还是int类型,而且会向下取整 System.out.println(a % b);//0 System.out.println(7.5%2.0);//%不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模 //结果为1.5 System.out.println(6+0.2);//类型不一致时,范围小的会自动提升为大的,再运算 //结果为6.2
2.增量运算符(+= -= *= %= /=)
该种类型运算符操作完成后,会将操纵的结果赋值给左边的数。
int a = 1; a += 1;//即a = a + 1; System.out.println(a);//输出2 a -= 1;//a = a - 1; System.out.println(a);//输出1 a *= 3;//a = a * 3; System.out.println(a);//输出3 a /= 3;//a = a / 3; System.out.println(a);//输出1 a %= 3;//a = a % 3; System.out.println(a);//输出1
3.自增/自减运算符(++ --)
++
是给变量的值
+1
,
--
是给变量的值
-1
。
int a = 1; a++;//后置++,表示给a的值加1,此时a的值为2 System.out.println(a++);//后置++是先使用变量原来值,表达式结束时再对变量+1,因此输出2 System.out.println(a);//输出3 ++a;//前置++表示给a的值加1 System.out.println(++a);//前置++是先给变量+1,然后使用变量中的值,因此输出5 System.out.println(--a);//输出4
注意:
1.如果单独使用,前置++和后置++没有任何区别
2.如果混合使用,前置++先+1,然后使用变量+1之后的值,后置++则是先使用变量原来的值,运算结束再对结果+1
3.关系运算符
关系运算符主要有六个: < <= == != > >= ,其计算结果为true或者false
int a = 1; int b = 2; System.out.println(a == b);//false System.out.println(a != b);//true System.out.println(a < b);//true System.out.println(a > b);//false System.out.println(a <= b);//true System.out.println(a >= b);//false
注意:当需要多次判断时,不能连着写,比如:3<a<5,定义a = 4,那么3<a的结果为true,ture为布尔类型不能与整型比较。
4.逻辑运算符
逻辑运算符主要有三个
:
&& || !
,运算结果都是
boolean
类型。
1.逻辑与&&
语法规则:表达式
1 &&
表达式
2
,左右表达式必须是
boolean
类型的结果。
相当于现实生活中的且,比如:如果是学生,并且 带有学生证 才可以享受半票。
两个表达式都为真,结果才是真,只要有一个是假,结果就是假。
int a = 1; int b = 2; System.out.println(a == 1 && b == 2);//左为真且右为真则结果为真 System.out.println(a == 1 && b < a);//左为真但右为假则结果为假 System.out.println(a > b && b == 2);//左为假但右为真则结果为假 System.out.println(a > b && b < a);//左为假且右为假则结果为假
2.逻辑或 ||
表达式1 | 表达式2 | 结果 |
真 | 真 | 真 |
真 | 假 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
int a = 1; int b = 2; System.out.println(a == 1 || b == 2);//左为真且右为真则结果为真 System.out.println(a == 1 || b < a);//左为真但右为假则结果为真 System.out.println(a > b || b == 2);//左为假但右为真则结果为真 System.out.println(a > b || b < a);//左为假且右为假则结果为假
3.逻辑非 !
语法规则:
!
表达式
真变假,假变真。
int a = 1; System.out.println(!(a == 1));//a == 1为true,取个非就是false System.out.println(!(a != 1));//a != 1为false,取个非就是true
4.短路求值
&&和|| 遵守短路求值的规则.
System.out.println(10 > 20 && 10 / 0 == 0);//打印false System.out.println(10 < 20 || 10 / 0 == 0);//打印true
我们都知道,计算10/0,程序会报错,但是上面的代码却能正常运行,说明10/0并没有真正被求值.
注意:
1.对于&&,如果左侧表达式值为false,则表达式结果一定是false,无需计算右侧表达式.
2.对于||,如果左侧表达式值为true,则表达式结果一定为true,无需计算右侧表达式.
3.&和| 如果表达式结果为boolean时,也表示逻辑运算,但与&& || 相比,它们不支持短路求值.
5.位运算符
Java
中数据存储的最小单位是字节,而数据操作的最小单位是比特位
.
字节是最小的存储单位,每个字节是由
8
个二 进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。
位运算符主要有四个
:
& | ~ ^
,除
~
是一元运算符外,其余都是二元运算符。
位操作表示
按二进制位运算
.
计算机中都是使用二进制来表示数据的
(01
构成的序列
),
按位运算就是在按照二进制位的每一位依次进行计算.
1. 按位与 &
如果两个二进制位都是
1,
则结果为
1,
否则结果为
0.
int a = 10; int b = 20; System.out.println(a & b);//输出0
进行按位运算
,
需要先把
10
和
20
转成二进制
,
分别为
1010
和
10100
2.按位或 |
如果两个二进制位都是0,则结果为0,否则结果为1.
int a = 10; int b = 20; System.out.println(a | b);//输出30(0 0 0 1 1 1 1 0)
3.按位取反 ~
如果该位为
0
则转为
1,
如果该位为
1
则转为
0
int a = 0xf;
System.out.printf("%x\n", ~a);
注意
:
1.0x
前缀的数字为 十六进制 数字
.
十六进制可以看成是二进制的简化表示方式
.
一个十六进制数字对应
4 个二进制位.
2.0xf
表示
10
进制的
15,
也就是二进制的
1111
3.
printf
能够格式化输出内容
, %x
表示按照十六进制输出
.
4.\n
表示换行符
4.按位异或^
如果两个数字的二进制位相同
,
则结果为
0,
相异则结果为
1.
int a = 0x1; int b = 0x2; System.out.printf("%x\n", a^b);//输出3
注意:
1.两个相同的数异或结果为0
2.n^0 = n
6.条件运算符
条件运算符只有一个
:
表达式
1 ?
表达式
2 :
表达式
3
当
表达式
1
的值为
true
时
,
整个表达式的值为
表达式
2
的值
;
当
表达式
1
的值为
false
时
,
整个表达式的值为
表达式
3
的值
.
也是
Java
中唯一的一个
三目运算符
,
是条件判断语句的简化写法
.
int a = 10; int b = 20; int max = a > b ? a : b; System.out.println(max);
注意:
1.表达式2和表达式3的结果要同类型,除非能发生类型隐式类型转换
int a = 10; int b = 20; double max = a < b ? 1 : 2.0; System.out.println(max);
2.表达式不能单独存在,其产生的结果必须要被使用。