编者按
何为运算符?加减乘除吗?这些只是Java运算符中的一种,Java提供了丰富了运算符,有数学运算方面,有逻辑关系方面;今天我们就来聊聊Java运算符,小伙伴们,一起来学习吧!
容提要
- 算数运算符
- 位运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 其他运算符
算数运算符
顾名思义,算数运算符表达的是数学中的算数运算;Java中的算数运算符详见表1:
表1 算数运算符
运算符 | 含义 | 数学表达公式 |
+ | 两数相加 | X + Y |
- | 两数相减 | X - Y |
* | 两数相乘 | X * Y |
/ | 两数相除,被除数不能为零 | X / Y |
% | 两数求模,也称为两数取余 | X % Y |
++ | 整数自增,也就是将当前整数加1 | ++X或者X++,相当于X = X + 1 |
-- | 整数自减,也就是将当前整数减1 | --X或者X--, 相当于X = X - 1 |
结合算数运算符表,我们敲一段具体的代码:
public class MathOperator{
public static void main(String[] args){
int X = 100;
int Y = 50;
// 算数运算符 +
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++;
System.out.println("整数自增 X++ = " + X);
// 算数运算符 ++
++Y;
System.out.println("整数自增 ++Y = " + Y);
// 算数运算符 --
X--;
System.out.println("整数自减 X-- = " + X);
// 算数运算符 --
--Y;
System.out.println("整数自减 --Y = " + Y);
}
}
位运算符
介绍位运算之前,我们先介绍一下计算机存储计量一些基本概念:
- bit,比特,简称b,0或1两种形式
- Byte,字节,简称B,1B等于8b,计算机存储中基本计量单位
- Kilotyte,千字节,简称KB,1KB等于1024B
- Megabyte,兆字节,简称MB,1M等于1024KB
- Gigabyte,吉子节,简称GB,1GB等于1024MB
- Trillionbyte,太字节,简称TB,1TB等于1024GB
前期课程已经介绍了Java的内置数据类型,如short类型,bit位数为16位,也就是两字节。例如,short x=1153,其二进制对应为10010000001
位运算符作用于按位计算,JAVA中能够应用位运算符的类型有整数、长整数、短整数、字符类和字节型。JAVA位运算符有七种,详见表2:
表2 位运算符
操作符 | 含义 |
& | 与操作:相同位均为1,则结果为1;否则,结果为0 |
| | 或操作:相同位均为0,则结果为0;否则,结果为1 |
^ | 异或操作:相同位值均相同,则结果为0;否则,结果为1 |
~ | 非操作:按位取反,0变为1,1变为0 |
<< | 左移操作符:按位左移指定的位数,高位舍弃,低位补零 |
>> | 右移操作符:按位右移指定位数,其中,正数高位补零,低位舍弃;负数高位补一,低位舍弃 |
>>> | 无符号右移操作符:按位右移指定位数,高位补零,低位舍弃 |
我们来看一段具体的代码示例:
public class MathBitOperator {
public static void main(String []args) {
// x为60的二进制形式0011 1100
int x = 60;
// y为13的二进制形式0000 1101
int y = 13;
// z为位运算结果
int z = 0;
// 与运算&,z为12,二进制数0000 1100
z = x & y;
System.out.println("与运算:x&y = " + z);
// 或运算|,z为61,二进制数0011 1101
z = x | y;
System.out.println("或运算:x|y = " + z);
// 异或操作^,z为49,二进制数0011 0001
z = x ^ y;
System.out.println("异或操作:x^y = " + z);
// 非操作~,z为-61,二进制数1100 0011
z = ~x;
System.out.println("非操作:~x = " + z);
// 左移操作<<,z为120,0111 1000
z = x << 1;
System.out.println("左移操作:x<<1 = " + z);
// 右移操作>>,z为30,0001 1110
z = x >> 1;
System.out.println("右移操作:x>>1 = " + z);
// 无符号右移>>>,z为30,0001 1110
z = x >>> 1;
System.out.println("无符号右移操作:x>>>1 = " + z);
}
}
赋值运算符
赋值运算符顾名思义,将数值、字符等赋值给变量,Java支持丰富的赋值运算符,详见表3:
表3 赋值运算符表
操作符 | 含义 |
= | 简单赋值运算符,符号右边的赋值给符号左边的 |
+= | 加和赋值运算符,符号右边的和符号左边的相加,结果赋值给符号左边的 |
-= | 减和赋值运算符,符号左边的减去符号右边的,结果赋值给符号左边的 |
*= | 乘和赋值运算符,符号右边的和符号左边的相乘,结果赋值符号左边的 |
/= | 除和赋值运算符,符号左边的除以符号右边的,结果赋值给符号左边的 |
%= | 取模和赋值运算符,符号左边的取模符号右边的,结果赋值给符号左边的 |
<<= | 左移赋值运算符,符号左边的按位左移,结果赋值给符号左边的 |
>>= | 右移赋值运算符,符号左边的按位右移,结果赋值给符号左边的 |
&= | 按位与赋值运算符,符号左边的和符号右边的按位与,结果赋值给符号左边的 |
^= | 按位异或赋值运算符,符号左边的和符号右边的按位异或,结果赋值给符号左边的 |
|= | 按位或赋值运算符,符号左边的和符号右边的按位或,结果赋值给符号左边的 |
我们来看一段具体的代码示例:
public class AssignOperator {
public static void main(String []args) {
int x = 10;
int y = 20;
int z = 0;
// 简单赋值运算符
z = x + y;
System.out.println("简单赋值运算符:z = x + y,z的结果是" + z);
// 加和赋值运算符
z = 0;
z += x;
System.out.println("加和赋值运算符:z += x, z的结果是" + z);
// 减和赋值运算符
z = 0;
z -= x;
System.out.println("减和赋值运算符:z -= x,z的结果是" + z);
// 乘和赋值运算符
z = 0;
z *= x;
System.out.println("乘和赋值运算符:z *= x,z的结果是" + z);
// 除和赋值运算符
z = 0;
z /= x;
System.out.println("除和赋值运算符:z /= x,z的结果是" + z);
// 取模和赋值运算符
z = 15;
z %= x;
System.out.println("取模和赋值运算符:z %= x,z的结果是" + z);
// 左移赋值运算符
z = 15;
z <<= 2;
System.out.println("左移赋值运算符:z <<= 2,z的结果是" + z);
// 右移赋值运算符
z = 15;
z >>= 2;
System.out.println("左移赋值运算符:z >>= 2,z的结果是" + z);
// 按位与赋值运算符
z = x & y;
System.out.println("按位与赋值运算符:z = x & y,z的结果是" + z);
// 按位异或赋值运算符
z = x ^ y;
System.out.println("按位异或赋值运算符:z = x ^ y,z的结果是" + z);
// 按位或赋值运算符
z = x | y;
System.out.println("按位异或赋值运算符:z = x | y,z的结果是" + z);
}
}
关系运算符
关系运算符表示真或假,Java支持6种关系运算符,详见表4:
表4 关系运算符?
操作符 | 含义 |
== | 符号两边相等即为真,否则为假 |
!= | 符号两边不相等即为真,否则为假 |
> | 符号左边大于右边即为真,否则为假 |
< | 符号左边小于右边即为真,否则为假 |
>= | 符号左边大于或者等于右边即为真,否则为假 |
<= | 符号左边小于或者等于右边即为真,否则为假 |
我们来看一段具体的代码示例:
public class RelationOperator {
public static void main(String []args) {
int x = 10;
int y = 20;
System.out.println("变量x = " + x);
System.out.println("变量y = " + y);
// ==关系运算符
if (x == y) {
System.out.println("x == y,结果为真!");
} else {
System.out.println("x == y,结果为假");
}
// !=关系运算符
if (x != y) {
System.out.println("x != y,结果为真!");
} else {
System.out.println("x != y,结果为假");
}
// >关系运算符
if (x > y) {
System.out.println("x > y,结果为真!");
} else {
System.out.println("x > y,结果为假");
}
// <关系运算符
if (x < y) {
System.out.println("x < y,结果为真!");
} else {
System.out.println("x < y,结果为假");
}
// >=关系运算符
if (x >= y)
{
System.out.println("x >= y,结果为真!");
} else {
System.out.println("x >= y,结果为假");
}
// <=关系运算符
if (x <= y) {
System.out.println("x <= y,结果为真!");
} else {
System.out.println("x <= y,结果为假");
}
}
}
逻辑运算符
逻辑运算符用来表示真或者假,Java支持3种逻辑运算符,具体详见表5:
表5 逻辑运算符?
操作符 | 含义 |
&& | 逻辑与,符号两边操作数都为真,结果真;否则,结果假 |
|| | 逻辑或,符号两边操作数任何一个为真,结果真;否则,结果假 |
! | 逻辑非,符号操作数为真,结果为假;符号操作数为假,结果为真 |
我们来看一段具体的代码示例:
public class LogicOperator {
public static void main(String []args) {
boolean x = true;
boolean y = false;
System.out.println("变量x=" + x);
System.out.println("变量y=" + y);
// &&逻辑运算符
if (x && y) {
System.out.println("x && y,结果为真");
} else {
System.out.println("x && y,结果为假");
}
// ||逻辑运算符
if (x || y) {
System.out.println("x || y,结果为真");
} else {
System.out.println("x || y,结果为假");
}
// !逻辑运算符
if (!x) {
System.out.println("!x,结果为真");
} else {
System.out.println("!x,结果为假");
}
}
}
其他运算符
除了上述运算符之外,Java中还有两个重要的运算符,条件运算符和instanceof运算符。
1、条件运算符
又称为三元运算符或者三元表达式,该表示的语法形式为:
变量 r = 表达式 ? 变量 x : 变量 y;
表达式一般采用逻辑运算、关系运算,运算的结果为真,冒号左边的变量x赋值给变量r;运算结果为假时,冒号右边的变量y复制给变量r。我们看一段具体的代码示例:
public class TernaryExpression {
public static void main(String []args) {
int r = 0;
int x = 10;
int y = 20;
System.out.println("变量r的初始值是" + r);
// ?: 三元表达式
r = (x >= y) ? x : y;
System.out.println("三元表达式:r = (x >= y) ? x : y,r的结果是" + r);
}
}
2、instanceof算符
检查对象是否为特定类型,用于类类型和接口类型,其语法形式为:
变量r = 变量 x instanceof (class or interface) type
语法中的,type只能为class(类)或者interface(接口);x的类型和type类型一致时,运算的结果为真;否则,为假。我们来看一段具体的代码示例:
public class InstanceOfExpression {
public static void main(String []args) {
String msg = "Hello world!";
boolean r = msg instanceof String;
if (r) {
System.out.println("变量msg类型是String");
} else {
System.out.println("变量msg类型不是String");
}
}
}
总结
本讲我们介绍了Java语言中各种运算符,其中,逻辑运算符、关系运算符等是重点需要掌握的;后续章节我们将重点介绍关于循环控制等知识,这部分知识依赖于本讲的运算符知识。
话说千遍,不如同学们练习一遍!赶紧操练起来吧,小伙伴们!
往期回顾
- 第1讲 Java前世今生
https://www.toutiao.com/article/7306394115615294006/?log_from=70c615ccdd79d_1701223389682
- 第2讲 Java开发环境配置
https://www.toutiao.com/article/7306698955294196287/?log_from=73070f7d6bc4e_1701410469896
- 第3讲 Java基本数据类型
https://www.toutiao.com/article/7307468491400233508/?log_from=dc37fba24a013_1701659931185