Java操作符
Java也提供了一套丰富的操作符(运算符)来操纵变量。
算数运算符
定义
定义: 算数运算符用来进行数学中的算数运算,如下表所示:
运算符 | 描述 | 案例 |
---|---|---|
+ | 加号(有字符串参与时为拼接符号) | int c =a + b; String s = “a” + “b”; |
- | 减号 | int c = a-b; |
* | 乘号 | int c = a * b; |
/ | 除号 | int c = a / b; |
% | 取模 | int c = a % b; |
案例
int a = 3;
int b = 4;
System.out.println("a+b=" + (a + b));
System.out.println("a-b=" + (a - b));
System.out.println("a*b=" + (a * b));
System.out.println("a/b=" + (a / b));
System.out.println("a%b=" + (a % b));
运行结果:
a+b=7
a-b=-1
a*b=12
a/b=0
a%b=3
不一样的"+"运算符
"+"号运算符当有字符串参与时(即"abc"形式的类型参与运算),作为拼接/连接符号。
int x = 3;
String str = "4";
String t = str + x;
System.out.println("t=" + t);
运行结果
t=43
除法的结果未必是小数
java对除法运算最后的结果是由参与运算的类型决定的。
比如: int a = 3; int b = 4; a/b —的结果依然是int类型,这样就会造成除法的结果丢弃小数点后的数值。
int a = 3;
int b = 4;
double c = a / b;
System.out.println("c=" + c);
运行结果
c=0
赋值运算符
定义
赋值运算符(=): 在基本类型变量运算中用来给变量进行赋值,即将右边的常量、变量(变量存储的值)赋值给左边的变量。
案例
int x = 3;
double y = 4.01;
char ch = 'a';
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println("ch=" + ch);
运行结果
x=3
y=4.01
ch=a
自增减运算符
定义
自增(减)运算符: 进行变量自增(减)1运算。 即对变量自身进行+1运算,但是由于其出现的位置不同又可以分为前置(如:++a)、后置运算符(如: a++)。
运算符 | 描述 | 案例 |
---|---|---|
++a | a先自增1 | int y = ++a;[a=a+1, then: y = a] |
a++ | a后自增1 | int y = a++;[y=a, then: a=a+1] |
--a | a先自减1 | int y = --a;[a=a-1, then: y = a] |
a-- | a后自减1 | int y = a–;[y=a, then: a=a-1] |
案例
int x = 3;
int y = ++x;
System.out.println("x=" + x + ",y=" + y);
int a = 3;
int b = a++;
System.out.println("a=" + a + ",b=" + b);
运行结果
x=4,y=4
a=4,b=3
与算数的+1/-1比较
byte a = 1;
a = a + 1;
以上代码会存在类型溢出风险,原因是常量1默认为int, int + byte 结果应该为int,但是=号左边为byte,右边向左边写入时会有溢出问题。
byte a = 1;
a++;
java优化了++运算符,对其进行了类型处理。
复合运算符
定义
复合的赋值语句,包含了运算和赋值。
运算符 | 描述 | 案例 |
---|---|---|
+= | a先加,再赋值 | a += b; → [a = a+b] |
-= | a先减,再赋值 | a -= b; → [a = a-b] |
*= | a先乘,再赋值 | a = b; → [a = ab] |
/= | a先除,再赋值 | a /= b; → [a = a/b] |
%= | a先取模,再赋值 | a %= b; → [a = a%b] |
案例
int x = 3;
int y = 5;
y += 5;
System.out.println("y=" + y);
运行结果
y=10
优化的赋值运算
假设以下代码,复合运算符(+=)优化了 计算并对运算结果进行了类型处理。建议大家在开发中多使用复合运算符。
byte a = 3;
a +=4;
关系运算符
定义
关系运算符, 关系运算符返回的结果是 boolean 类型(true/false)。
运算符 | 描述 | 案例 |
---|---|---|
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大于等于 | a >= b |
<= | 小于等于 | a <= b |
== | 判断是否相等 | a == b |
!= | 不等于 | a != b |
案例
int x = 3;
int y = 4;
System.out.println("x>y: " + (x > y));
System.out.println("x<y: " + (x < y));
System.out.println("x>=y: " + (x >= y));
System.out.println("x<=y: " + (x <= y));
System.out.println("x==y: " + (x == y));
System.out.println("x!=y: " + (x != y));
运算结果
x>y: false
x<y: true
x>=y: false
x<=y: true
x==y: false
x!=y: true
浮点数的比较是不准确的
System.out.println((3 * 0.1) == 0.3);
运行结果
false
逻辑运算符
定义
逻辑运算符一般用于连接boolean类型的表达式或者值。
运算符 | 描述 | 案例 |
---|---|---|
&& | 逻辑与,操作符左右同时成立 | 3>1 && 6 > 2 |
|| | 逻辑或,操作符左右其中一个成立 | a > b || b > c |
! | 逻辑非,对逻辑结果取反 | boolean a = true;a = !a; |
案例
int x = 3;
int y = 4;
boolean f1 = (y>0) && (y>x);
boolean f2 = (y>0) || (y>x);
boolean f3 = !(y>x);
System.out.println("f1=" +f1);
System.out.println("f2=" +f2);
System.out.println("f3=" +f3);
运行结果
f1=true
f2=true
f3=false
短路运算
逻辑运算中的短路运算:如果存在逻辑与运算,运算过程先左 →右,如果左边不成立则不需要计算右边的表达式,即短路运算;
int x = 5;
int y = 4;
boolean f = (y < 0) && (y < x);
System.out.println("f=" + f);
短路运算规则: 先计算(y<0)结果为false 那么就不去比较(y<x)。
& 和 |
&,| 也可以用来进行逻辑运算,但是它们没有短路运算能力。
int a = 3;
boolean f = a < 3 & a++ > 1;
System.out.println("f=" + f);
System.out.println("a=" + a);
运行结果
f=false
a=4
tips: a < 3不成立后, &右侧代码继续运行 a++执行一次,a = 4;
位运算符
定义
位操作符可以进行二进制运算。
运算符 | 描述 | 案例 |
---|---|---|
& | 位与,同1为1 | 1 0 0 0 & 1 0 1 0 → 1 0 0 0 |
| | 位或,有1为1 | 1 0 0 0 | 1 0 1 0 → 1 0 1 0 |
^ | 异或,相同为0,相异为1 | 1 0 0 0 ^ 1 0 1 0 → 0 0 1 0 |
>> | 有符号右移动 | 1 0 0 0 >> 2 → 0 0 1 0 |
<< | 有符号左移动 | 0 0 1 0 0 0 >> 2 → 1 0 0 0 0 0 |
>>> | 无符号右移动 | 1 0 0 0 >>> 2 → 1 0 |
<<< | 无符号左移动 | 0 0 0 1 <<< 2 → 1 0 0 |
案例
int x = 3;
int y = 4;
System.out.println("x & y: " + (x & y));
System.out.println("x | y: " + (x | y));
System.out.println("x ^ y: " + (x ^ y));
System.out.println("x >> y: " + (x >> y));
System.out.println("x << y: " + (x << y));
运行结果
x & y: 0
x | y: 7
x ^ y: 7
x >> y: 0
x << y: 48
异或(^)特性
X ^ Y ^ Y = X
int x = 3;
int y = 4;
System.out.println("x ^ y: " + (x ^ y));
System.out.println("x ^ y ^ y: " + (x ^ y ^ y));
运行结果
x ^ y: 7
x ^ y ^ y: 3
三目运算符
定义
三目运算符类似于一个简化的条件表达式。
案例
int x = 3;
int t = (x > 3) ? 99 : -99;
System.out.println("t=" + t);
运行结果
t = 99