【Java编程动手学】 Java中的运算符全解析

文章目录

    • 一、引言
    • 二、算术运算符
      • 1、基本概念
      • 2、具体运算符及示例
    • 三、关系运算符
      • 1、基本概念
      • 2、具体运算符及示例
    • 四、自增减运算符
      • 1、基本概念
      • 2、具体运算符及示例
    • 五、逻辑运算符
      • 1、基本概念
      • 2、具体运算符及示例
    • 六、位运算符
      • 1、基本概念
      • 2、具体运算符及示例
    • 七、移位运算符
      • 1、基本概念
      • 2、具体运算符及示例
    • 八、赋值运算符
      • 1、基本概念
      • 2、具体运算符及示例
    • 九、其他运算符
      • 1、三元运算符
      • 2、instanceof运算符
    • 十、运算符优先级
    • 十一、总结


一、引言

在Java编程中,运算符是构建表达式和实现各种逻辑操作的基础元素。它们就像是一种特殊的符号语言,能够让程序员对数据进行各种处理和运算。今天,我们就来全面总结Java中的各类运算符,包括算术运算符、关系运算符、自增减运算符、逻辑运算符、位运算符、移位运算符、赋值运算符、其他运算符以及运算符优先级。

二、算术运算符

1、基本概念

算术运算符用于执行基本的数学运算,如加法、减法、乘法、除法和取模等。

2、具体运算符及示例

运算符名称示例代码示例
+加法运算符计算两个数的和int a = 5; int b = 3; int sum = a + b; // sum的值为8
-减法运算符计算两个数的差int x = 10; int y = 4; int diff = x - y; // diff的值为6
*乘法运算符计算两个数的乘积int m = 6; int n = 7; int product = m * n; // product的值为42
/除法运算符计算两个数的商int p = 20; int q = 3; int result = p / q; // result的值为6(整数除法)
%取模运算符计算两个数相除的余数int num1 = 10; int num2 = 3; int remainder = num1 % num2; // remainder的值为1

在Java中,当使用/运算符对两个整数进行除法运算时,结果也是整数,小数部分会被舍去。如果希望得到精确的浮点数结果,至少需要一个操作数是浮点数。例如:

public class ArithmeticOperatorsExample {public static void main(String[] args) {double div1 = 20.0 / 3;System.out.println("20.0 / 3的结果:" + div1);}
}

三、关系运算符

1、基本概念

关系运算符用于比较两个值之间的关系,结果是一个布尔值(truefalse)。

2、具体运算符及示例

运算符名称示例代码示例
==等于运算符判断两个值是否相等int a = 5; int b = 5; boolean isEqual = (a == b); // isEqual的值为true
!=不等于运算符判断两个值是否不相等int x = 10; int y = 8; boolean isNotEqual = (x != y); // isNotEqual的值为true
>大于运算符判断左边的值是否大于右边的值int m = 15; int n = 10; boolean isGreater = (m > n); // isGreater的值为true
<小于运算符判断左边的值是否小于右边的值int p = 5; int q = 8; boolean isLess = (p < q); // isLess的值为true
>=大于等于运算符判断左边的值是否大于或等于右边的值int num1 = 10; int num2 = 10; boolean isGreaterOrEqual = (num1 >= num2); // isGreaterOrEqual的值为true
<=小于等于运算符判断左边的值是否小于或等于右边的值int num3 = 7; int num4 = 9; boolean isLessOrEqual = (num3 <= num4); // isLessOrEqual的值为true

关系运算符常用于条件判断语句中,例如if语句:

public class RelationalOperatorsExample {public static void main(String[] args) {int score = 85;if (score >= 60) {System.out.println("及格了");} else {System.out.println("不及格");}}
}

四、自增减运算符

1、基本概念

自增运算符(++)和自减运算符(--)用于对变量进行递增或递减操作。它们可以分为前缀和后缀两种形式。

2、具体运算符及示例

运算符名称示例代码示例及结果分析
++(前缀)前缀自增运算符先对变量进行自增操作,再使用变量的值int a = 5; int b = ++a;
执行后,a的值变为6,b的值也变为6。因为前缀自增是先增加a的值,再将增加后的值赋给b
++(后缀)后缀自增运算符先使用变量的值,再对变量进行自增操作int x = 5; int y = x++;
执行后,x的值变为6,但y的值是5。因为后缀自增是先使用x的原始值赋给y,然后再增加x的值。
--(前缀)前缀自减运算符先对变量进行自减操作,再使用变量的值int m = 10; int n = --m;
执行后,m的值变为9,n的值也变为9。
--(后缀)后缀自减运算符先使用变量的值,再对变量进行自减操作int p = 10; int q = p--;
执行后,p的值变为9,但q的值是10。

自增减运算符在循环语句中经常使用,例如for循环:

public class IncrementDecrementExample {public static void main(String[] args) {for (int i = 0; i < 5; i++) {System.out.println(i);}}
}

五、逻辑运算符

1、基本概念

逻辑运算符用于对布尔值进行逻辑运算,返回一个布尔结果。

2、具体运算符及示例

运算符名称示例代码示例
&&逻辑与运算符当且仅当两个操作数都为true时,结果才为trueboolean a = true; boolean b = false; boolean result1 = a && b; // result1的值为false
``逻辑或运算符
!逻辑非运算符对布尔值取反boolean flag = true; boolean notFlag =!flag; // notFlag的值为false

逻辑运算符常用于条件组合判断:

public class LogicalOperatorsExample {public static void main(String[] args) {int age = 20;boolean hasTicket = true;if (age >= 18 && hasTicket) {System.out.println("可以进入");} else {System.out.println("不可以进入");}}
}

六、位运算符

1、基本概念

位运算符用于对整数的二进制位进行操作。

2、具体运算符及示例

运算符名称示例代码示例及解释
&按位与运算符对两个操作数的对应二进制位进行与运算int a = 5; // 二进制为0101<br>int b = 3; // 二进制为0011<br>int result1 = a & b; // 二进制为0001,即1
``按位或运算符对两个操作数的对应二进制位进行或运算
^按位异或运算符对两个操作数的对应二进制位进行异或运算,相同为0,不同为1int m = 5; // 二进制为0101<br>int n = 3; // 二进制为0011<br>int result3 = m ^ n; // 二进制为0110,即6
~按位取反运算符对操作数的二进制位取反int p = 5; // 二进制为0101<br>int result4 = ~p; // 二进制为1010(在32位整数中,前面还有很多1),即-6

位运算符在一些对性能要求较高的底层编程中经常使用,例如对硬件寄存器的操作。

七、移位运算符

1、基本概念

移位运算符用于将整数的二进制位进行左移或右移操作。

2、具体运算符及示例

运算符名称示例代码示例及解释
<<左移运算符将二进制位向左移动指定的位数,右边空出的位用0填充int a = 5; // 二进制为0101<br>int result1 = a << 2; // 二进制为010100,即20
>>带符号右移运算符将二进制位向右移动指定的位数,保持符号位不变int x = -8; // 二进制(补码)为11111111111111111111111111111000<br>int result2 = x >> 2; // 二进制(补码)为11111111111111111111111111111110,即-2
>>>无符号右移运算符将二进制位向右移动指定的位数,左边空出的位用0填充int m = -8; // 二进制(补码)为11111111111111111111111111111000<br>int result3 = m >>> 2; // 二进制为00111111111111111111111111111110,即1073741822

移位运算符可以用于高效地进行乘以或除以2的幂次方的运算。

八、赋值运算符

1、基本概念

赋值运算符用于将一个值赋给一个变量。

2、具体运算符及示例

运算符名称示例代码示例
=简单赋值运算符将右边的值赋给左边的变量int a; a = 10;
+=加赋值运算符将左边变量与右边的值相加,再将结果赋给左边的变量int x = 5; x += 3; // x的值为8
-=减赋值运算符将左边变量减去右边的值,再将结果赋给左边的变量int m = 10; m -= 4; // m的值为6
*=乘赋值运算符将左边变量与右边的值相乘,再将结果赋给左边的变量int n = 6; n *= 7; // n的值为42
/=除赋值运算符将左边变量除以右边的值,再将结果赋给左边的变量int p = 20; p /= 3; // p的值为6(整数除法)
%=取模赋值运算符将左边变量对右边的值取模,再将结果赋给左边的变量int num1 = 10; num1 %= 3; // num1的值为1

赋值运算符可以简化代码的编写,使代码更加简洁。

九、其他运算符

1、三元运算符

语法为条件? 表达式1 : 表达式2。如果条件为true,则返回表达式1的值;否则,返回表达式2的值。例如:

public class TernaryOperatorExample {public static void main(String[] args) {int score = 85;String result = score >= 60? "及格" : "不及格";System.out.println(result);}
}

2、instanceof运算符

用于判断一个对象是否是一个特定类或接口的实例。例如:

public class InstanceofExample {public static void main(String[] args) {String str = "Hello";if (str instanceof String) {System.out.println("str是String类的实例");}}
}

十、运算符优先级

在Java中,不同的运算符具有不同的优先级。当表达式中包含多个运算符时,优先级高的运算符会先进行运算。以下是Java运算符优先级从高到低的表格:

优先级运算符
1()[].
2++(后缀)、--(后缀)、!~+(一元正号)、-(一元负号)、(type)(类型转换)
3*/%
4+(二元加法)、-(二元减法)
5<<>>>>>
6<<=>>=instanceof
7==!=
8&
9^
10`
11&&
12`
13?:(三元运算符)
14=+=-=*=/=%=<<=>>=>>>=&=^=、`

在实际编程中,为了避免因运算符优先级问题导致的错误,可以使用括号来明确运算顺序。

十一、总结

Java中的运算符种类繁多,每种运算符都有其特定的功能和用途。算术运算符用于基本的数学运算,关系运算符用于比较操作,自增减运算符用于变量的递增和递减,逻辑运算符用于布尔值的逻辑运算,位运算符和移位运算符用于对二进制位的操作,赋值运算符用于给变量赋值,其他运算符如三元运算符和instanceof运算符也有其独特的应用场景。同时,了解运算符的优先级对于正确编写表达式至关重要。通过合理使用这些运算符,我们可以编写出高效、简洁的Java程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912758.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端】1 小时实现 React 简历项目

近期更新完毕。仅包括核心代码 目录结构 yarn.lock保证开发者每次能下载到同版本依赖&#xff0c;一般不需要特别留意 package.json 是 Node.js 项目、前端项目、npm/yarn的配置文件。 Dockerfile 是用来 定义 Docker 镜像构建过程的文本文件。它是一份脚本&#xff0c;告诉 …

python中的pydantic是什么?

Pydantic 是 Python 中一个用于数据验证和设置管理的库&#xff0c;主要通过 Python 类型注解&#xff08;Type Hints&#xff09;来定义数据结构&#xff0c;并自动验证输入数据的合法性。它广泛应用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理、数据序列化等场…

腾讯云市场目前饱和度

首先我需要理解市场饱和度的概念。市场饱和度通常指一个产品或服务在潜在市场中的渗透程度&#xff0c;高饱和度意味着市场增长空间有限&#xff0c;低饱和度则表明还有较大发展潜力。 从搜索结果看&#xff0c;腾讯云目前在中国云服务市场排名第三&#xff0c;市场份额约为15%…

EDR、NDR、XDR工作原理和架构及区别

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; EDR、NDR、XDR是网络安全中关键的检测与响应技术&#xff0c;它们在覆盖范围、数据源和响应机制上有显著差异。以下是它们的工作原理和架构详解&#xff1a; --- ### &#x1f50d; 一、EDR&#xff0…

vue3 + luckysheet 实现在线编辑Excel

效果图奉上&#xff1a; 引入的依赖&#xff1a; "dependencies": {"types/jquery": "^3.5.32","types/xlsx": "^0.0.36","jquery": "^3.7.1","xlsx": "^0.18.5",}在index.html中…

Linux下MinIO分布式安装部署

文章目录 一、MinIO简单说明二、MinIO分布式安装部署1、关闭SELINUX2、开启防火墙2.1、关闭firewall&#xff1a;2.2、安装iptables防火墙 3、安装MinIO4、添加MinIO集群控制脚本4.1添加启动脚本4.2添加关闭脚本 5、MinIO控制台使用 一、MinIO简单说明 1、MinIO是一个轻量的对…

Codeforces Round 980 (Div. 2)

ABC 略 D 这个过程一定是由1向后跳的过程中穿插有几次向前一步一步走。直到跳到一个位置后再把前面所有没有走过的位置倒序走一遍。总分就等于最大位置的前缀和-前面所有起跳位置和。前缀和固定我们只需要求到每个位置的最小起跳和即可。对于这个向后跳和向前走的过程我们可以…

Langchain实现rag功能

RAG&#xff08;检索增强生成&#xff09;的核心是通过外部知识库增强大模型回答的准确性和针对性&#xff0c;其工作流程与优化策略如下&#xff1a; 一、RAG 核心流程 ‌知识库构建‌ ‌文档加载与分割‌&#xff1a;将非结构化文档&#xff08;PDF、Markdown等&#xff09;…

算法笔记上机训练实战指南刷题

算法笔记上机训练实战指南刷题记录 文章目录 算法笔记上机训练实战指南刷题记录模拟B1001 害死人不偿命的(3n1)猜想B1011 AB 和 CB1016 部分ABB1026 程序运行时间B1046划拳B1008数组元素循环右移问题B1012 数字分类B1018 锤子剪刀布A1042 Shuffling Machine 每天两题&#xff0…

MYSQL基础内容

一、介绍 1.不用数据库&#xff1a;使用IO流对数据进行管理 2.使用数据库&#xff1a;使用SQL语句对开发的数据进行管理&#xff0c;能储存上亿条数据 3.MYSQL&#xff1a; 是流行的关系型数据库管理系统之一&#xff0c;将数据保存在不同的数据表中&#xff0c;通过表与表之…

音视频会议服务搭建(设计方案)-01

前言 最近在做音视频会议系统服务搭建的工作任务&#xff0c;因为内容过多&#xff0c;我会逐篇分享相关的设计方案、开发思路、编程语言、使用的组件集合等等。如果你也有大型音视频会议系统搭建架构的需求&#xff0c;希望这些可以对你有所帮助。 EchoMeet 音视频会议系统架构…

刷leetcode hot100/准备机试--图

图的基础知识【这部分建议使用acm模式】 图论理论基础 | 代码随想录 存储&#xff1a; 一般有邻接表【适合稀疏图】【数组 链表 】和邻接矩阵【适合稠密图】存储方式 注意邻接表 和 邻接矩阵的写法都要掌握&#xff01; 邻接矩阵 n个节点&#xff0c;申请n*n或者&#xf…

无代码自动化测试工具介绍

无代码自动化测试工具允许用户无需编写代码即可创建和运行测试,通过拖拽式界面或录制回放等可视化界面进行操作。 这些工具利用图形用户界面和预定义命令来创建测试,使非编程人员也能进行自动化测试。 无代码自动化测试工具使团队能够: 使用直观的拖拽界面开发和执行自动化…

python学习打卡day58

DAY 58 经典时序预测模型2 知识点回顾&#xff1a; 时序建模的流程时序任务经典单变量数据集ARIMA&#xff08;p&#xff0c;d&#xff0c;q&#xff09;模型实战SARIMA摘要图的理解处理不平稳的2种差分 n阶差分---处理趋势季节性差分---处理季节性 建立一个ARIMA模型&#xf…

分布式锁的实现方式:使用 Redisson 实现分布式锁( Spring Boot )

Redisson提供了分布式和可扩展的Java数据结构&#xff0c;包括分布式锁的实现。 1. 添加依赖 在pom.xml中添加Redisson依赖&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>…

Web基础关键_004_CSS(二)

目 录 一、样式 1.行内样式 2.内部样式 3.外部样式 二、选择器优先级 1.非关系选择器 2.关系选择器 三、属性 四、盒子模型 五、元素 1.块级元素 2.行内元素 3.行内块级元素 4.元素类型转换 六、浮动 七、定位 1.静态定位 2.相对定位 3.绝对定位 4.固定定位 …

数据使用权与所有权分离:能否诞生“数据租赁”市场

——首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助 数据如矿藏&#xff0c;开采需“契约” 想象一座蕴藏着无尽资源的数字矿山&#xff1a;企业或个人拥有数据的“所有权”&#xff0c;如同手握矿脉的产权&#xff0c;但若无法高效挖掘其价值&#xff0c;矿石终将沉…

【esp32s3】2 - 第一个组件

下面的内容编写时间跨度有点大&#xff0c;乱了得一团&#xff0c;也没ai整理。食之无味&#xff0c;弃之可惜。 推荐笔记&#xff1a;ESP32 之 ESP-IDF 教学&#xff08;十八&#xff09;—— 组件配置&#xff08;KConfig&#xff09; 推荐笔记&#xff1a;Kconfig 拓展 乐鑫…

【Java_EE】单例模式、阻塞队列、线程池、定时器

目录 单例模式 饿汉模式<代码> 懒汉模式<代码> 阻塞队列 阻塞队列概念 阻塞队列解决的问题 阻塞队列工作原理 阻塞队列的优/缺点 优点 缺点 模拟实现阻塞队列<代码> 线程池 线程池概念 线程池解决的问题 线程池参数 四种拒绝策略 线程池工作…

Redis初识第七期---ZSet的命令和应用场景

ZSet相较于Set来说&#xff0c;它又是有序的&#xff0c;这个有序指的就是我们通常意义上的有序了&#xff0c;ZSet内部中是按照升序来排序的。 排序规则&#xff1a;ZSet相较于Set来说&#xff0c;它内部引入了一个新的属性&#xff1a;分数&#xff08;Score&#xff09;&am…