二, 运算符
运算符用于对定义的变量做运算的。
特点:
-
默认做过运算的数据的类型不会低于int型
byte b1 = 1, b2 = 2; byte b3 = (byte)(b1 + b2);
2. 默认做过运算的数据的类型取出现的最高类型
int a = 10; double b = 2.5; //int d = a * b; System.out.println(a * b);
注意: 结果范围 : int ~ double
1, 算术运算符
符号 | 含义 | 特殊注意 |
---|---|---|
+ | 加法;拼接 | |
- | 减法 | |
* | 乘法 | |
/ | 除法 | / 两侧如果都是整数,只能得到整数(向下); /两侧有一侧是小数才能得到小数 |
% | 余数 | a%b为0,a是b的倍数; a % 2 为0 a是偶数 |
++ | 自加1 | 一个变量的自加: a++ ; ++a ; a的上面加1 |
-- | 自减1 | 一个变量的自减: a-- ; --a ; a的上面减1 |
System.out.println(10 + "20"); System.out.println(10 + '2'); System.out.println(10 + 20); System.out.println(10.5 - 2); System.out.println(10 * 2.5); System.out.println(5 / 2); System.out.println(5.0 / 2); System.out.println(10 % 3); System.out.println(8 % 2); System.out.println(6 % 7); int a = 12; System.out.println(a % 6);
小结:
-
++ -- 当自加自减运算时没有其他运算或者操作,无区别
-
当其他操作:
++ 后置: 先执行其他操作,后自加1
++ 前置: 先自加1,再执行其他操作
2,比较运算符(关系运算符)
又叫做关系运算符:
符号 | 含义 | 特殊情况 |
---|---|---|
== | 判断两个值是否相等 | |
!= | 不等于 | |
> | ||
>= | ||
<= | ||
< |
小结:
-
比较运算符结果是:布尔类型 true false
-
经常可以用于判断的条件
-
比较的变量的值(和内存空间的大小无关)
int a = 4, b = 3; //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);
值的比较:
int a = 10; char c = 10; float f = 10.0f; double d = 10.0; System.out.println(a == c); System.out.println(c == f); System.out.println(c == d); System.out.println(f == d);
3, 逻辑运算符
符号 | 含义 | 特殊情况 |
---|---|---|
&& | 短路与 | 当第一个操作数为假,第二个操作数不执行(被短路) |
& | 逻辑与 | 两侧都执行 |
|| | 短路或 | 当第一个操作数为真,第二个操作数不执行(被短路) |
| | 逻辑或 | 两侧都执行 |
! | 非 |
小结:
与: 两端操作数,同真则真,一假则假
或: 两端操作数,一真则真,同假则假
非: 真变假,假变真
逻辑运算符的操作数必须是布尔类型
与: && 短路
& 不短路,& 操作的是数字,不做逻辑运算,位运算
或: || 短路
| 不短路,| 操作的是数字,不做逻辑运算,位运算
int a = 1, b = 1, c = 1; //boolean boo1 = a ++ == 1 && b ++ == 1 || c++ == 1; //System.out.println(boo1);// true //System.out.println(a + "," + b + "," + c);// 2 2 1 boolean boo1 = ++a == 2 || b ++ == 1 && ++c == 2; System.out.println(boo1);// true System.out.println(a + "," + b + "," + c);// 2 1 1
位运算(二进制运算)
二进制运算:eg.先变成二进制 0000 0010,在得出结果 2
五个位运算符: & | ^ << >>
& | 优先0 |
---|---|
| | 优先1 |
^ | 同0异1 |
<< | 左移n位 = * 2的n次幂 |
>> | 右移n位 = / 2的n次幂 |
& 按位与( 优先 0 ) : 同为1,则是1,有0则是0.
System.out.prinln(2&3); // 2 //0000 0010 //0000 0011 相同则同,遇0则0 //0000 0010 --->结果: 2
| 按位或 ( 优先 1):有1为1,同0则0
System.out.prinln( 2 | 3); //0000 0010 //0000 0011 //0000 0011
^ 按位异或 : 相同为0,不同为1
System.out.prinln( 2 ^ 3); //0000 0010 //0000 0011 //0000 0001
<< 左移 左移n位 = *2的n次幂
2变成8最快的方式: System.out.prinln(2 << 2); // 电脑运行二进制最快,2的二进制是: 0000 0010 // 2左移2位就是 0000 1000,也就是8的二进制 System.out.prinln(3 << 2);// 3*4 = 12
右移 >> 右移n位 = /2的n次幂
System.out.prinln(16 >> 2);//16 / 4 = 4
4, 条件运算符
三目运算符(三元运算符,需要三个操作数)
++ - - !是单目运算符,只有一个操作数即可
& | 都是双目运算符
语法:
条件操作数1 ?操作数2 : 操作数3
运算过程:
先进行 操作数1的boolean运算,
如果真的,则执行操作数2,
假的,则执行操作数3
int a = 10 ; double b = 8.0 ; System.out.prinln( a > b ? a : b ); //运算结果类型 取运算中数据的最高类型 //运算中出现double,所以运算结果也自动变成double,显示 10.0 。
5, 赋值运算符
将右侧的值赋给左侧。
符号 | 含义 | 特殊情况 |
---|---|---|
= | 赋值 | |
+= | 加上再赋值,a+= 10; a = a + 10; | += 完成类型内部转化 |
-= | ||
*= | ||
/= | ||
%= |
byte a = 10 , b = 20; a = 20; // a = a + 10; 错误写法 a += 10; System.out.println(a);
小结:
-
= 赋值,取最后一次赋值的结果
-
+= -= *= /= %= 可以内部转化类型
-
除了++ -- 后置,赋值运算符的优先级最低
6, 运算符总结
优先级:
括单算关逻条赋
-
括号, 单目 : ! ++ -- 前置 -
-
算术运算符
-
关系运算符
-
逻辑运算符 && > ||
-
条件运算符
-
赋值运算符