运算符时用于对定义的变量做运算的。
特点:
1、但凡做过运算,结果类型不会低于int型
byte a=1,o=2;
byte p=(byte)(a+o);
System.out.println(p);
2、但凡做过运算,结果类型为出现过最高的类型
int w=4;
double e=2.5;
double r=w*e;
System.out.println(r);
注意,结果范围:int——double
3.1算数运算符
符号 | ||
---|---|---|
+ | 加法,拼接 | |
- | 减法 | |
* | 乘法 | |
/ | 除法 | 除号的两侧如果都是整数,只能得到整数;有一侧是小数才能得到小数 |
% | 取余 | a%b==0; a是b的倍数 |
++ | 自加 | a++; ++a; |
-- | 自减 | a--; --a; |
int l=1;
System.out.println(l++);//1
System.out.println(l);//2
System.out.println(++l);//3
注意:
++ -- 当自加自减运算时没有其他运算或操作,无区别
当其他操作
++前置是先自+1再输出,++后置是先输出再+1
3.2比较运算符
又叫关系运算符:
符号 | 含义 | 特殊情况 |
---|---|---|
== | 判断两个值是否相等 | |
!= | 不等于 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 |
注意:
1、比较运算符结果是:布尔类型 true false
2、经常可以用于判断条件
3、比较的变量的值(和内存空间的大小无关)
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.3逻辑运算符
3.3.1逻辑运算符
符号 | 含义 | 特殊情况 |
---|---|---|
&& | 短路与 | 当第一个操作数为假,第二个操作数不执行(被短路) |
& | 逻辑与 | 两侧都执行 |
|| | 短路或 | 当第一个操作数为真,第二个操作数不执行(被短路) |
| | 逻辑或 | 两侧都执行 |
! | 非 |
注意:
与:两端操作数,同真则真,一假则假
或:两端操作数,一真则真,同假则假
非:真变假,假变真
逻辑运算符的操作数必须是布尔类型
int a = 1, b= 2, c = 3;
//逻辑运算
System.out.println(a ++ == b && ++ b == c);
//a > b a > c
System.out.println(a > b && a > c);
//a b c 相等
System.out.println(a == b && b == c);
System.out.println(!true);
System.out.println(!(a == b));
[总结:]
与:&& 短路 & 不短路,& 操作的时数字,不做逻辑运算,位运算
或:|| 短路 | 不短路,| 操作的是数字,不做逻辑运算,位运算
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
3.3.2 位运算
(二进制运算:先变成二进制,了解)
按位与& : 同为1,得到1,有0则0;
按位或 | :有1为1,同0则0;
按位异或 ^:相同为0,不同为1;
左移<< 左移n位 => *2的n次幂
右移>> 右移n位 => /2的n次幂
// 2 0000 0010
// 8 0000 1000
//左移
//System.out.println(2 << 2);//0000 1000 2 * 4
//System.out.println(5 << 3); // 5 * 8 = 40
//System.out.println(3 << 2); // 3 * 4
//右移
//System.out.println(16 >> 2);//16 / 4
//System.out.println(32 >> 3); // 32 / 8
System.out.println(2 & 3); // 按位与
//0000 0010
//0000 0011
//0000 0010
System.out.println(2 | 3); // 按位或
//0000 0010
//0000 0011
//0000 0011
System.out.println(2 ^ 3);// 按位异或
//0000 0010
//0000 0011
//0000 0001
3.4条件运算符
三目运算符(三元运算符,需要三个操作数)
符号 | 含义 | 特殊情况 |
---|---|---|
条件操作数1?操作数2:操作数3 | 先做条件判断,如果是真的,最终去操作数2,如果假的,最终取操作数3 | 取最高类型 |
int age = 17;
System.out.println(age > 18 ? "成年人" : "未成年");
int a = 54, b = 33;
//获得a和b的最大值
System.out.println("最大值=" + (a > b ? a : b));
//获得a和b的最小值
int min = 0;
min = a < b ? a : b;
System.out.println("最小值=" + min);
//取最高类型
double res = 99 > 8.0 ? 99 : 8.0;
System.out.println(res);// A 99 B 8.0 C 99.0 D 1
3.5赋值运算符
将右侧的值赋给左侧。
符号 | 含义 | 特殊情况 |
---|---|---|
= | 赋值 | |
+= | 加上再赋值,a+=10; a=a+10; | +=完成类型内部转化 |
-= | 减等于 | |
*= | 乘等于 | |
/= | 除等于 | |
%= | 取余等于 |
byte a = 10 , b = 20;
a = 20;
// a = a + 10; 错误写法
a += 10;
System.out.println(a);
注意:
1、=赋值,取最后一次赋值的结果
2、+= -= *= /= %= 可以内部转化类型(数据类型不发生改变)
3、除了++ -- 后置,赋值运算符的优先级最低
3.6运算符总结
优先级:
1、单目 ! () ++ -- 前置 -
2、算数运算符
3、关系运算符
4、逻辑运算符
5、条件运算符
6、赋值运算符