【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次方.

相关文章
|
17天前
|
Java Go 开发工具
【Java】(4)五种运算符的说明(&&、||、>=、>、<=、<)、4种控制语句(if、for、while、dowhile)、输入和输出说明
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的的类型byte类型,无论怎么进行加或追减,最终该变量的数据类型还是byte类型。注:一个表达式中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果。当布尔表达式的结果是true的时候,选择表达式1作为整个表达式的执行结果。当用户输入的时候,并且最终敲回车键的时候,键入的信息会自动赋值给a。并且,连接运算之后的结果还是一个字符串类型。表达式1 : 表达式2。
59 1
|
7月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
118 13
|
2月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
4月前
|
人工智能 Java
Java运算符中的隐式转换
本文介绍了 Java 运算符中的隐式类型转换规则,涵盖算数、逻辑、位、关系、赋值及其他运算符。重点分析了算数和位运算符在处理小于 int 位长的数据时会自动转换为 int 类型的特性,并通过代码示例说明可能引发的类型不匹配错误。逻辑、关系、赋值及其他运算符则不涉及类型转换。总结指出,部分运算符在计算时会将小位长数据隐式转为 int 类型,结果也为 int。
|
4月前
|
人工智能 Rust Java
Java中的算数、关系、逻辑、条件、赋值 五大运算符详解
本文介绍了Java中的运算符及其优先级,包括算数运算符(如+、-、*、/、%、++、--)、关系运算符(如&lt;、&gt;、==、!=)、逻辑运算符(如&&、||、!)、条件运算符(三目运算符)和赋值运算符(如=、+=、-=等)。详细解释了每种运算符的功能与用法,例如自增自减运算符的特点、逻辑运算符的短路法运算以及位运算符的操作规则。最后还提供了运算符优先级表格,帮助开发者理解复杂表达式的计算顺序。文中提醒,在实际开发中,建议使用括号明确运算顺序以提高代码可读性。
211 0
|
Java
Java运算符
Java运算符
104 12
|
7月前
|
Java
课时15:Java运算符(基础数学运算符)
课时15介绍了Java中的基础数学运算符,涵盖加、减、乘、除及自增自减运算。强调了运算符的优先级和使用括号的重要性,并通过范例展示了四则运算与自增自减的具体应用。提醒编写代码时应保持简洁,避免复杂的表达式,确保代码易读性和可维护性。
|
7月前
|
SQL IDE 算法
《从头开始学java,一天一个知识点》之:运算符与表达式:算术、比较和逻辑运算
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」,每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《控制流程:if-else条件语句实战》。
132 6
|
7月前
|
Java
课时17:Java运算符(关系运算符)
范例:进行关系判断。如果要进行关系运算的操作可使用:>、<、>=、<=、!=(不等于)、==。所有的关系运算符判断完成的数据返回结果都是布尔类型(boolean)。只要使用关系运算符进行逻辑判断,最终的结果就是布尔型,只有true和false两种结果,而且能和if语句结合使用。
132 6
|
7月前
|
Java
课时16:Java运算符(三目运算符)
范例:将两个变量值在大的内容赋值给新变量。三目是一种赋值运算,它指的是根据条件来进行判断。(根据判断的结果来决定赋值内容)对于三目运算的基本使用语法如下: 数据类型 变量 = 布尔表达式 ?条件满足时赋值内容:条件不满足时:赋值内容