Java的运算操作
个人主页:平行线也会相交
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【JavaSE_primary】
文章目录
- 算术运算符
- 增量运算符
- +=
- 注意
- 自增自减运算符
- 关系运算符
- 逻辑运算符
- 逻辑与&&
- 逻辑或||
- 逻辑非!
- 短路求值
- 位运算符
- 按位与&
- 按位或|
- 按位取反~
- 按位异或^
- 移位运算符
- 左移<<
- 右移>>
- 条件运算符
在Java中,根据我们的需要,有多种类型的操作符可以对操作数进行运算,不仅仅只有算术运算符(加减乘除)这一种运算符,患有其它类型的运算符。
Java运算符有以下几种:
**算术运算符(即+-×/)、增量运算符(+= -+ *= %=)、自增自减运算符、关系运算符(><==)、逻辑运算符、位运算符、移位运算符、条件运算符。
下面我们就一一来介绍这几种运算符。
算术运算符
算术运算符无非就是我们最常用的四则运算法则,即加减乘除(+ - * /),还有一种就是%。
由于(加减乘除)比较简单,这里我举几个例子一笔带过。
System.out.println(2*4);System.out.println(4-2);System.out.println(5*3);System.out.println("===========");System.out.println(10/3);System.out.println(10/-3);System.out.println((-10/3));System.out.println(-10/-3);

- 当两侧操作数类型不一致时,会向大的提升。
System.out.println(1+0.8);

请看对于/操作符我这样用可不可以呢?请看:
System.out.println(4/0);
来看运行结果:

可以看到直接报错了,这是因为在Java中,分母是不可以为0的。
再来看一下%运算符:
System.out.println(10%3);System.out.println(10%-3);System.out.println(-10%3);System.out.println(-10%-3);

注意,对于%运算符两边的操作数是可以有浮点数出现的,这一点和C语言的确是不一样的(C语言中的%运算符两边的操作数是坚决不能出现浮点数的)。所以,%不仅可以对整型进行取模,也可以对double类型进行取模。
请看:


增量运算符
+=
我们先来看一个简单的。
int a = 10;int b = 10;int c = 10;int d = 10;int e = 8;a += 5;System.out.println( a);b -= 3;System.out.println(b);c *= 2;System.out.println(c);d /= 2;System.out.println(d);e %= 3;System.out.println(e);

注意
我们来看看这种写法:

我们可以看到会出错。
那这样写呢?

这样写就不会出错了。可以正常运行。

这里并不会报错,这也时该运算符特殊的地方:该运算符会帮我们进行类型转换。
自增自减运算符
在Java中,对于++和--运算符虽然与C语言的++和--差不多,但是还是有一些细节不一样的地方。
int a = 10;--a;System.out.println(a);

这一点和C语言是一样的。
但是注意这里,请看:
int a = 10;int b = a--;System.out.println(b);
这是后置减减的a赋值给了b。

结果b的值是10.
但是如果是前置减减的a赋值给了b呢?
int a = 10;int b = --a;System.out.println(a);

我们会发现结果是9。
但是注意这里,请看:
int a = 10;a = a--;System.out.println(a);
如果按照C语言来的话,这里结果应该是9。但是请看结果:

看,发现结果竟然是10,这也是C语言和Java不一样的地方,记住就好,只不过两种语言处理的方式不同罢了。
还有一点:++和--运算符是用来操作变量的,而不是用来操作常量的。
关系运算符
在Java中,关系运算符主要有6个:== != <= >= < >,其运算结果只有俩个,要么是true,要么是false。
int a = 10;int b = 20;System.out.println(a>b);System.out.println(a<b);System.out.println(a==b);System.out.println(a!=b);System.out.println(a<=b);System.out.println(a>=b);

当然,需要判断的是,当需要多次判断的时候,我们是不可以连这些的,比如:4 < a < 6。
逻辑运算符
逻辑运算符主要是三种:&& || !,其运算结果均为boolean类型。
逻辑与&&
语法:表达式1 && 表达式2.并且左右表达式必须是boolean类型的结果,只有左右表达式同时为真时,结果才为真,否则就是假。
举个例子:
int a = 10;int b = 20;System.out.println(a == 10 && b == 20);System.out.println(a > 10 && b < 20);

逻辑或||
逻辑或:
语法规则:表达式1 || 表达式2.并且左右表达式必须是boolean类型的结果,只有左右表达式只要有一个是真的,结果就是真的,同时为假结果才为假。
int a = 10;int b = 20;System.out.println(a == 10 || b == 20);System.out.println(a == 10 || b < 20);System.out.println(a == 100 || b == 200);

逻辑非!
逻辑非的语法规则:!表达式。非真即假,非假即真。
int a = 1;System.out.println(!(a == 1));System.out.println(!(a != 1));

短路求值
我们先来看一段代码吧:
public static void main(String[] args) {//短路求值System.out.println(10 > 20 && 10/0 == 0);System.out.println(10 < 20 || 10/0 == 0);}
运行一下:

我们发现程序成功运行起来了。但是我们已经知道10/0这个表达式,会出现异常而导致程序报错,但是程序成功的运行了起来。这个就是短路求值的作用。
短路求值规则,
对于&&而言:如果左侧表达式为false,则整个表达式的结果一定为false,右侧的表达式不需要进行运算。
对于||而言:如果左侧表达式为true,则整个表达式的结果一定为true,右侧的表达式不需要进行运算。
对于&和|:如果表达式结果为boolean时,也表示逻辑运算,但与&&和||相比,它们不支持短路求值。
System.out.println(10 < 20 & 1 > 0);System.out.println(10 < 20 | 1 >0);

注意了请看下段代码:
System.out.println(10 > 20 & 10/0 == 0);System.out.println(10 < 20 | 10/0 ==0);

我们发现程序会进行报错,说明了10/0 == 0在这里依然会被执行。
所以建议当我们想用逻辑与和逻辑或的时候,不要用&和|,直接用&&和||就好了,这样容易区分(因为&和|也是位运算的符号)。
位运算符
位运算就是按照二进制位进行每一位的运算。
位运算符主要有4个:& | ~ ^
按位与&
规则:两个二进制位只有相同时才为1,其余情况均为0。
int a = 10;int b = 20;System.out.println(a & b);


按位或|
int a = 10;int b = 20;System.out.println(a | b);

注意:当&和|的操作数为整数(int,short,long,byte)的时候,表示按位运算,当操作数为boolean的时候,表示逻辑运算。
按位取反~
按位取反规则该位为0则改为1,该位为1则改为0。
这里依然有几点需要大家注意:
1.0x前缀的数字为十六进制数字,十六进制可以看成时二进制的简化表示方式,一个十六进制数字对应4个二进制位。
2.printf能够格式化输出内容,%x表示按照十六进制输出。
int c = 0xf;System.out.printf("%x\n",~a);

按位异或^
规则:如果两个数字的二进制位相同,则表示结果为0,相异则结果为1.()即相同为0,不同为1。相同的两个数之间进行异或,结果为0。
举个例子:
int a = 0x1;int b=0x2;System.out.printf("%x\n",a^b);

移位运算符
移位运算符有三个:<< >> >>>,且均为二元运算符,按照二进制比特位进行运算。
左移<<
规则:最左侧不要了,最有侧补0.
例如:
int a = 0x10;System.out.printf("%x\n",a<<1);

注意:最终结果是按照十六进制来进行运算的;另一方面,向左移位的时候,丢弃的是符号位,因此正数左移可能会变成负数;左移统一在右边补0。
右移>>
右移:最右侧不要了,最左侧补符号位(正数补0,负数补1)。
int a = 0x10;System.out.printf("%x\n",a>>1);

还有一种右移是无符号右移:不管符号位是1还是0,统一补0。
还是来举个例子:
int b = -1;System.out.println(b >> 1);System.out.println(b >>> 1);


分割线------------------------------------------------------------------------------------------------

条件运算符
条件运算符就一个:
即表达式1?表达式2:表达式3
当表达式1的结果为true是,整个表达式的值为
表达式2的值,当表达式1的结果为false是,整个表达式的值为表达式3的值。
这是Java中唯一的一个三目运算符。
int a = 10;int b = 20;int max = a>b?a:b;System.out.println(max);

注意:表达式不能单独存在,其结果必须要被使用。比如:

以上就是Java运算符的一些操作,就到这里吧。
再见啦!!!

相关文章:
Java的运算操作
个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录算术运算符增量运算符注意自增自减运算符关系运算符逻辑运算符逻辑与&&逻辑或||逻辑非!…...
基于OBD系统的量产车评估测试(PVE)
在轻型汽车污染物排放限值及测量方法(中国第六阶段)中,除了对汽车尾气排放等制定了更为严格的限制之外,也在OBD系统认证项目中增加了新的要求——量产车评估(Production Vehicle Evaluation)测试。该测试由…...
【蓝桥杯集训10】Tire树 字典树 最大异或对专题(3 / 3)
目录 字典树模板 1、插入操作 2、查询操作 143. 最大异或对 - trie 二进制 3485. 最大异或和 - 前缀和Trie滑动窗口 字典树模板 活动 - AcWing 字典树:高效存储和查找字符串集合的数据结构 son[节点1地址][值]节点2地址 —— 节点1的子节点为节点2cnt[节点地…...
docker部署zabbix6.2.7+grafana
目录 1、下载docker 2、下载相关镜像文件 3、创建一个供zabbix系统使用的网络环境 4、创建一个供mysql数据库存放文件的目录 5、启动mysql容器 6、为zabbix-server创建一个持久卷 7、启动zabbix-server容器 8、创建语言存放目录 9、启动zabbix-web容器 10、启动zabbix…...
【Java开发】JUC基础 04:Synchronized、死锁、Lock锁
1 概念介绍并发:同一个对象被多个线程同时操作📌 线程同步现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题,比如,食堂排队打饭,每个人都想吃饭,最天然的解决办法就是,排队…...
离散数学---期末复习知识点
一、 数理逻辑 [复习知识点] 1、命题与联结词(否定¬、析取∨、合取∧、蕴涵→、等价↔),命题(非真既假的陈述句),复合命题(由简单命题通过联结词联结而成的命题) 2、命题公式与赋值(成真、成假)&#x…...
在线安装ESP32和ESP8266 Arduino开发环境
esp32和esp8266都是乐鑫科技开发的单片机产品,esp8266价格便宜开发板只需要十多块钱就可以买到,而esp32是esp8266的升级版本,比esp8266的功能和性能更强大,开发板价格大约二十多元就可以买到。 使用Arduino开发esp32和esp8266需要…...
【Python实战】激情澎湃,2023极品劲爆舞曲震撼全场,爬虫一键采集DJ大串烧,一曲醉人女声DJ舞曲,人人都听醉~(排行榜采集,妙啊~)
导语 哈喽!大家好。我是木木子吖~今天给大家带来爬虫的内容哈。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 今天教大家Python爬虫实战一键采集大家喜欢的DJ舞曲哦! …...
[SSD综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?
版权声明:付费作品,未经许可,不可转载前言SSD (Solid State Drive),即固态硬盘,通常是一种以半导体闪存(NAND Flash)作为介质的存储设备。SSD 以半导体作为介质存储数据&…...
SAP Insurance Analyzer
SAP Insurance Analyzer 是一款用于保险公司财务和风险管理的软件。SAP Insurance analyzer 支持基于 IFRS 17 或 Solvency II 的保险合同估值和计算要求。SAP Insurance Analyzer 于 2013 年 5 月推出,为源数据和结果数据集成了一个预配置的保险数据模型。 源数据…...
自动化测试 ——自动卸载软件
在平常的测试工作中,经常要安装软件,卸载软件, 即繁琐又累。 安装和卸载完全可以做成自动化。 安装软件我们可以通过自动化框架,自动点击Next,来自动安装。 卸载软件我们可以通过msiexec命令行工具自动化卸载软件 用msiexec 命令来卸载软件 …...
05 封装
在对 context 的封装中,我们只是将 request、response 结构直接放入 context 结构体中,对应的方法并没有很好的封装。 函数封装并不是一件很简单、很随意的事情。相反,如何封装出易用、可读性高的函数是非常需要精心考量的,框架中…...
clean
clean code 记得以前写过这题,写的乱七八糟,分析来分析去。 后悔应该早点写代码,leetcode大一就该刷了。 https://leetcode.cn/problems/plus-one/submissions/ class Solution { public:vector<int> plusOne(vector<int>&…...
佛科院计算机软件技术基础——线性表
一、基础知识了解:结构体的理解:我们知道整型是由1位符号位和15位数值位组成,而就可以把结构体理解为我们定义的数据类型,如:typedef struct {int data[2]; //存储顺序表中的元素int len; …...
linux下终端操作mysql数据库
目录 一.检查mysql是否安装 1. 查看文件安装路径 2. 查询运行文件所在路径(文件夹地址) 二.登录mysql 三.列出mysql全部用户 四.常用指令 1.查看全部数据库 2.选择数据库 …...
MySQL参数优化之thread_cache_size
1.thread_cache_size简介 每建立一个连接,都需要一个线程来与之匹配,此参数用来缓存空闲的线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL就会很快的响应连接请求。 show statu…...
gRPC服务健康检查(二):gRPC健康检查协议详解
gRPC健康检查协议健康检查用于检测服务端能否正常处理rpc请求,客户端对服务端的健康检查可以点对点进行,也可以通过某些控制系统(如负载平衡)进行。客户端可以根据服务端返回的状态执行对应的策略。因为GRPC服务可以用于简单的客户…...
Android系统10 RK3399 init进程启动(四十七) Android init 进程整体代码逻辑简述
配套系列教学视频链接:安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本文简单描述一下android init祖先进程启动的基本执行流程,让大家有一个整…...
CSDN 编程竞赛三十二期题解
竞赛总览 CSDN 编程竞赛三十二期:比赛详情 (csdn.net) 竞赛题解 题目1、传奇霸业 传奇霸业,是兄弟就来干。小春(HP为a)遇到了一只黄金哥布林(HP为x)。小春每次能对哥布林造成b点伤害,哥布林…...
Kubernetes 中的 Pod Hook
Pod Hook 我们知道Pod是Kubernetes集群中的最小单元,而 Pod 是有容器组组成的,所以在讨论 Pod 的生命周期的时候我们可以先来讨论下容器的生命周期。 实际上 Kubernetes 为我们的容器提供了生命周期钩子的,就是我们说的Pod Hook,…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

