运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
运算符的分类:
- 按照功能分为:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符
分类 | 运算符 |
---|---|
算数运算符 | +、-、*、/、%、++、- - |
赋值运算符 | =、+=、-=、*=、/=、%=、>>=、 <<=、>>>=、&=、 |
比较运算符 | >、>=、<、<=、==、! = |
逻辑运算符 | &、 |
位运算符 | &、 |
条件运算符 | (条件表达式)?结果1:结果2 |
Lambda运算符 | - > |
- 按照操作数个数分为:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符(三目运算符)
分类 | 运算符 |
---|---|
一元运算符(单目运算符) | 正号(+)、负号(-)、++、- -、!、~ |
二元运算符(双目运算符) | 除了一元和三元运算符剩下的都是二元运算符 |
三元运算符(三目运算符、条件运算符) | (条件表达式)?结果1:结果2 |
算数运算符
int num1 = 12;
int num2 = 5;
System.out.println(num1 % num2); //结果2
int num3 = -12;
int num4 = 5;
System.out.println(num3 % num4); //结果-2
int num5 = 12;
int num6 = -5;
System.out.println(num5 % num6); //结果2
int num7 = 12;
int num8 = -5;
System.out.println(num7 % num8); //结果-2
🍀 结论:取模以后,结果与被模数的符号相同
int num1 = 10;
int num2 = ++num1;
System.out.println(num1); //num1 = 11,num2 = 11
int num1 = 10;
int num2 = num1++;
System.out.println(num1); //num1 = 11,num2 = 10
int i = 10;
++i; 等于 i++;
System.out.println(i); //i=11
//计算89小时是多少天多少小时
int hours = 89;
int day = hours / 24;
int hour = hours % 24;
System.out.println(day + "天零" + hour + "小时"); //3天零17小时
💢 ++ 或 - - 不会改变变量的数据类型
赋值运算符
- 符号:=
- 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原理进行处理
- 支持连续赋值
- 扩展赋值运算符:+=、-=、*=、/=、%=
赋值运算符 | 符号解释 |
---|---|
+= | 将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量 |
-= | 将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量 |
*= | 将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量 |
/= | 将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量 |
%= | 将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量 |
int num1 = 10;
num1 += 5; //类似于 num1 = num1 + 5
System.out.println(num1); //15
int num2 = 1;
num2 *= 0.1; //类似于 num2 = (int)(num2 * 0.1)
System.out.println(num2); //0.1
//如何实现变量的值增加2
int num1 = 10;
num1 += 2;
System.out.println(num1);
int n=2;
int m=3;
n *= m++; //相当于 n= n * m++;
System.out.println(n); //6
int n=10;
n += (n++) + (++n);
System.out.println(n); //32
根据这个表达式的计算顺序,先计算括号内的 (n++) + (++n),
先算 n++,此时 n 的值为 10,然后 n 值加一,
变成 11,再算 ++n,此时 n 的值为 12,
所以 (n++) + (++n) 的结果为 10 + 12 = 22。
然后再将 n 的值加上 22,所以最终 n 的值为 32。
比较运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
< = | 小于等于 | 4< =3 | false |
> = | 大于等于 | 4> =3 | true |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
-
比较运算符的结果都是Boolean,也就是要么是
true
,要么是false
-
> < ≥ ≤
:只适用于基本数据类型(除Boolean类型之外) -
== !=
:适用于基本数据类型和引用数据类型
逻辑运算符
Java中常用的逻辑运算符有三种:&&
(逻辑与)、||
(逻辑或)和!
(逻辑非)。逻辑运算符用于对两个或多个布尔型变量进行比较,并返回一个布尔型结果。下面是Java中逻辑运算符的介绍:
&&
(逻辑与):当且仅当两个操作数都为true
时,结果才为true
,否则结果为false
。||
(逻辑或):当且仅当两个操作数都为false
时,结果才为false
,否则结果为true
。!
(逻辑非):操作数为true
则结果为false
,操作数为false
则结果为true
。
逻辑运算符通常用于控制程序的流程,例如在if
语句和while
循环语句中。下面是一个逻辑运算符的例子:
public class Main {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = true;
boolean result1 = a && b; // false
boolean result2 = a || b; // true
boolean result3 = !a; // false
boolean result4 = (a && b) || c; // true
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
System.out.println(result4);
}
}
在这个例子中,我们声明了三个布尔型变量a
、b
和c
,并对它们进行了一些逻辑运算。例如,使用逻辑与运算符&&
将a
和b
进行比较,结果为false
。使用逻辑或运算符||
将a
和b
进行比较,结果为true
。使用逻辑非运算符!
将a
进行取反,结果为false
。最后,我们使用逻辑运算符组合了多个表达式,例如(a && b) || c
,结果为true
。
总之,Java中常用的逻辑运算符有三种:&&
(逻辑与)、||
(逻辑或)和!
(逻辑非)。逻辑运算符用于对两个或多个布尔型变量进行比较,并返回一个布尔型结果。逻辑运算符通常用于控制程序的流程,例如在if
语句和while
循环语句中。
位运算符
在Java中,位运算符用于对二进制数进行操作。Java中常用的位运算符有六种:&
(按位与)、|
(按位或)、^
(按位异或)、~
(按位取反)、<<
(左移)和>>
(右移)。下面是Java中位运算符的介绍:
&
(按位与):对两个二进制数进行与运算,只有当两个数对应的二进制位都是1时,结果的对应位才是1,否则为0。- 1 & 1 结果为 1
- 1 & 0 结果为 0
- 0 & 1 结果为 0
- 0 & 0 结果为 0
|
(按位或):对两个二进制数进行或运算,只有当两个数对应的二进制位都是0时,结果的对应位才是0,否则为1。- 1 | 1 结果为 1
- 1 | 0 结果为 1
- 0 | 1 结果为 1
- 0 | 0 结果为 0
^
(按位异或):对两个二进制数进行异或运算,只有当两个数对应的二进制位不同时,结果的对应位才是1,否则为0。- 1 ^ 1 结果为0
- 1 ^ 0 结果为1
- 0 ^ 1 结果为1
- 0 ^ 0 结果为0
~
(按位取反):对一个二进制数进行取反运算,将其每个二进制位取反。<<
(左移):将一个二进制数向左移动指定的位数,低位补0。>>
(右移):将一个二进制数向右移动指定的位数,高位补符号位(即正数补0,负数补1)。
位运算符通常用于在程序中进行位操作,例如对二进制数进行拼接、截取等操作。下面是一个位运算符的例子:
public class Main {
public static void main(String[] args) {
int a = 0b00000010; // 二进制数2
int b = 0b00000011; // 二进制数3
int c = a & b; // 按位与运算,结果为2
int d = a | b; // 按位或运算,结果为3
int e = a ^ b; // 按位异或运算,结果为1
int f = ~a; // 按位取反运算,结果为-3
int g = a << 2; // 左移2位,结果为8
int h = b >> 1; // 右移1位,结果为1
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
System.out.println(g);
System.out.println(h);
}
}
在这个例子中,我们声明了两个二进制数a
和b
,分别为0b00000010
和0b00000011
。然后,我们对它们进行了一些位运算,例如使用按位与运算符&
对a
和b
进行比较,结果为2
。使用按位或运算符|
对a
和b
进行比较,结果为3
。使用按位异或运算符^
对a
和b
进行比较,结果为1
。使用按位取反运算符~
对a
进行取反,结果为-3
。使用左移运算符<<
将a
左移2位,结果为8
。使用右移运算符>>
将b
右移1位,结果为1
。
总之,Java中的位运算符用于对二进制数进行操作。Java中常用的位运算符有六种:&
(按位与)、|
(按位或)、^
(按位异或)、~
(按位取反)、<<
(左移)和>>
(右移)。位运算符通常用于在程序中进行位操作,例如对二进制数进行拼接、截取等操作。
说明:
<< >> >>> & | ^ ~
:针对数值类型的变量或常量进行运算,运算的结果也是数值<<
:每向左一动一位,结果就在原有的基础上 * 2>>
:每向右一动一位,结果就在原有的基础上 / 2
int num = 7;
System.out.println("num << 1 :" + (num << 1)); //14
System.out.println("num << 2 :" + (num << 2)); //28
System.out.println("num << 3 :" + (num << 3)); //36
右移>>:
-69 >> 4 类似于 -69/2的4次 = -69/16 = -5
69 >> 4 类似于 69/2的4次 = 69/16 = 5
💢 注意:如果不能整除,向下取整
题:如何交换两个int型变量的值?String呢?
int n = 10;
int m = 20;
//方式一:声明一个临时变量(推荐使用)
int temp = m;
m = n;
n = temp;
System.out.println("m ="+m+",n ="+n);
//方式二:优点:不需要定义临时变量 缺点:适用性差(不适用于非数值类型)、可能超出int范围
m = n + m;
n = m - n;
m = m - n;
System.out.println("m ="+m+",n ="+n);
//方式二:优点:不需要定义临时变量 缺点:适用性差(不适用于非数值类型)
m = n ^ m;
n = m ^ n;
m = m ^ n;
System.out.println("m ="+m+",n ="+n);
条件运算符(三元运算符)
(条件表达式)?表达式1:表达式2
- 条件表达式是Boolean类型的结果,根据Boolean的值选择表达式1或表达式2
- 条件表达式结果为true则运行表达式1
- 条件表达式结果为false则运行表达式2
文章总结:
这篇文档介绍了Java中的逻辑运算符和位运算符。逻辑运算符包括&&(逻辑与)、||(逻辑或)和!(逻辑非),用于比较布尔型变量并返回布尔型结果。位运算符用于对二进制数进行操作,包括&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)和>>(右移)。位运算符通常用于在程序中进行位操作,例如对二进制数进行拼接、截取等操作。此外,文档还介绍了条件运算符(三元运算符)的用法。