运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。
作用: 对字面量和变量进行操作的符号
算术运算符就是数学中的 加减乘除取余
运算符 | 描述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除(取整) |
% | 取余 |
示例:
public class Demo3 {
public static void main(String[] args) {
int a = 5;
int b = 2;
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=3
a*b=10
a/b=2
a%b=1
*/
注意:
Java中有两个数据类型的转换模式:一种是隐形类型转换,另外一种是强制类型转换
先介绍隐式类型转换
先看以下代码:
public static void main(String[] args) {
int a = 1;
double b = 2.1;
System.out.println(a + b);
}
上面代码的结果是3.1 这就是隐式类型转换
数字在进行运算时,数据类型不一样是不能进行运算的,需要转成相同的数据类型才能够进行运算
隐形类型转换是 将取值范围小(精度小)的数据类型转成取值范围大(精度大)的数据类型
在进行运算时,取值范围小的数据类型自动变成取值范围大的数据,然后再进行运算
byte char short 类型的数据在进行运算时,都会类型提升为int类型的数值 再进行运算
强制类型转换是 将取值范围大(精度大)的数据类型转成取值范围小(精度小)的数据类型
语法格式: 目标数据类型 变量名 = (目标数据类型) 被强转的数据
示例:
public static void main(String[] args) {
double a = 12.3;
// 目标数据类型 变量名 = (目标数据类型) 被强转的数据
int b = (int) a;
}
这就是强制类型转换
需要注意的是:在强制类型转换时,数据不能超过目标数据类型的取值范围
在讲算术运算符时,我是使用了字符串的拼接的
例如:
public static void main(String[] args) {
int a = 5;
int b = 2;
System.out.println("a+b="+(a+b));
}
// 输出结果
// a+b=7
当"+"操作中出现字符串时,那么此时这个"+"就不是算术运算符了,而是字符串的拼接,它会将字符串和数据拼接起来,变成一个新的字符串
看以下代码:
public static void main(String[] args) {
char a = 'a';
char b = 'b';
int ret = a + b;
System.out.println(ret);
}
// 输出结果: 195
之前说过byte char short 类型的数据在进行运算时,都会类型提升为int类型的数值 再进行运算
那么字符和字符相加都是变为int类型的数据再相加,那么字符对应的数字就需要用到ASCII码表了
如果想字符对应的ASCII值,可以看看➡ASCII码一览表,ASCII码对照表
在 字符与字符 或 字符与数字 进行相加时,字符会变为ASCII码表对应的数字在进行相加
符号 | 作用 |
---|---|
++ | 将变量的值自增1 |
– | 将变量的值自减1 |
这里的自增自减分的符号 可以放在变量名的前面也可以放在后面
示例:
public static void main(String[] args) {
int a = 10;
a++;
System.out.println("a = "+ a);
++a;
System.out.println("a = "+ a);
}
//输出结果
//a = 11
//a = 12
从这里我们可以看到不管++在变量前面还是后面 就是将变量的值+1
当然++在变量前面还是后面还是有区别的
先看代码:
public static void main(String[] args) {
int a = 10;
int ret1 = ++a;
System.out.println("ret1 = "+ ret1);
int b = 10;
int ret2 = b++;
System.out.println("ret2 = "+ ret2);
}
// 输出结果:
//ret1 = 11
//ret2 = 10
这就是++在变量前面还是后面的区别
在使用这种方式进行赋值时,++在前面时会变量的值会先自增1然后再进行赋值,如果++在后面则会先赋值然后再自增1
赋值运算符就是 “=” 就是将一个数据赋值给另一个变量
其中,还有一些复合赋值运算符
运算符 | 实例 |
---|---|
+= | b+=a 等价于 b=b+a |
-= | b-=a 等价于 b=b-a |
*= | b*=a 等价于 b=b*a |
/= | b/=a 等价于 b=b/a |
%= | b%=a 等价于 b=b%a |
关系运算符就比较两边数据的大小
运算符 | 描述 |
---|---|
== | 判断内容是否相等 |
!= | 判断内容是否不相等 |
> | 判断大于号左边的值是否大于右边 |
< | 判断小于号左边的值是否小于右边 |
>= | 判断大于号左边的值是否大于等于右边 |
<= | 判断小于号左边的值是否小于等于右边 |
关系运算符的结果都是boolean类型的 结果要么为true 要么为false
注意: 不要将 "==" 写成 "="了
符号 | 意义 | 作用 |
---|---|---|
& | 逻辑与(且) | 并且 两边都为真,才是真 |
I | 逻辑或 | 或 两边都是假,才是假 |
^ | 逻辑异或 | 相同为false,不同为true |
! | 逻辑非 | 取反 |
对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
语法格式: 关系表达式? 表达式1:表达式2
示例:
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a > b ? a : b;
System.out.println(c);
}
// 输出结果:20
这是使用三目运算符求两个值中的最大值
这里的计算分为三步:
位运算符主要有四个:
& | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符
位运算符都是在二进制的基础上进行运算
按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
移位运算也是在二进制的基础上进行运算
二进制的第一位是符号位,0代表正数,1代表负数
详情可以看一下:➡全面解析数据在内存中的存储
public static void main(String[] args) {
int a = 10;
System.out.println("a << 1 = "+(a<<1));
System.out.println("a >> 1 = "+(a>>1));
System.out.println("a >>> 1 = "+(a>>>1));
}
// 输出结果:
//a << 1 = 20
//a >> 1 = 5
//a >>> 1 = 5
左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
感谢你的观看!希望这篇文章能帮到你!
Java专栏在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”