【Java|基础篇】超详细讲解运算符

简介: 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。作用: 对字面量和变量进行操作的符号

1. 什么是运算符


运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。

作用: 对字面量和变量进行操作的符号


2. 算数运算符


算术运算符就是数学中的 加减乘除取余

运算符 描述
+
-
*
/ 除(取整)
% 取余

示例:

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

*/

注意:

在代码中,如果有小数进行操作,可能会有精度不准确的问题(简单说一下原因是因为计算机是采用二进制的方式存储数据,小数不好表示.如有需要可以观看这篇文章➡计算机中数据的存储规则

做除法和取模时,右操作数不能为0


隐式类型转换


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

从这里我们可以看到不管++在变量前面还是后面 就是将变量的值+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


3.赋值运算符


赋值运算符就是 “=” 就是将一个数据赋值给另一个变量

其中,还有一些复合赋值运算符

运算符 实例

运算符 实例
+= 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


4. 关系运算符


关系运算符就比较两边数据的大小

运算符 描述
== 判断内容是否相等
!= 判断内容是否不相等
> 判断大于号左边的值是否大于右边
< 判断小于号左边的值是否小于右边
>= 判断大于号左边的值是否大于等于右边
<= 判断小于号左边的值是否小于等于右边


5. 逻辑运算符


符号 意义 作用
& 逻辑与(且) 并且 两边都为真,才是真
I 逻辑或 或 两边都是假,才是假
^ 逻辑异或 相同为false,不同为true
! 逻辑非 取反

短路与(&&)和短路或(||)

对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.

对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.

& 和 | 两边的表达式都要计算,使用短路与和短路或可以提高效率


6.三目运算符


语法格式: 关系表达式? 表达式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先计算表达的值

2如果表达式为true,则取表达式1的值,如果为false,则为表达式2的值

3然后进行赋值


7. 位运算符


位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符

位运算符都是在二进制的基础上进行运算

按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.

按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0

按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.


8. 移位运算


移位运算也是在二进制的基础上进行运算

左移 <<: 最左侧位不要了, 最右侧补 0.

右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

无符号右移 >>>: 最右侧位不要了, 最左侧补 0.

二进制的第一位是符号位,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次方.

相关文章
|
4月前
|
Java
Java运算符
Java运算符
56 12
|
5天前
|
存储 Java
java中的常见运算符的计算方式
本文介绍了计算机中二进制数的原码、反码和补码的概念及其转换方式。原码是符号位加真值的绝对值;反码中正数不变,负数其余位取反;补码在反码基础上加1。文章还详细解释了Java中的常见运算符(如按位与、或、异或、移位等)如何基于二进制进行计算,并探讨了使用补码的原因,包括统一符号位处理和扩展表示范围。通过具体代码示例帮助理解这些概念。
java中的常见运算符的计算方式
|
5月前
|
Java 测试技术 数据处理
Java零基础教学(17):Java运算符详解
【8月更文挑战第17天】Java零基础教学篇,手把手实践教学!
89 4
|
3月前
|
算法 Java 测试技术
🌟Java 零基础 | 详解 单目运算符
【10月更文挑战第14天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
66 7
|
3月前
|
Java 测试技术 开发者
🌟Java 零基础 | 深入理解三目运算符
【10月更文挑战第13天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
102 3
|
3月前
|
Java 测试技术 开发者
🌟Java零基础-Lambda运算符详解 🌟
【10月更文挑战第12天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 1
|
3月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
64 4
|
3月前
|
安全 Java 测试技术
🌟 Java 零基础 | 详解 instanceof 运算符
【10月更文挑战第1天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
67 1
|
3月前
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
49 3
|
4月前
|
Java 测试技术 程序员
Java零基础(23) - Java赋值运算符,了解一下!
【9月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
72 11