关于Java中的运算符
文章目录
- 前言
- 一、什么是运算符
- 二、算术运算符
- 1.基本四则运算符:加减乘除模(+ - * / %)
- 2.增量运算符(+= -= *= /*)
- 3.自增/自减运算符(++ --)
- 三、关系运算符
- 四、逻辑运算符
- 1.逻辑&&
- 2.逻辑||
- 3.逻辑非!
- 4.短路求值
- 五、位运算
- 六、移位运算
- 七、条件运算符
- 八、运算符的优先级
前言
在之前我们已经学习了关于C语言的运算符,接下来我们再来学习Java中的运算符
一、什么是运算符
计算机的最基本的用途之一就是执行数学运算
作为一门计算机语言,Java也提供了丰富的运算符来操纵变量。Java中的运算符可分为以下:
算术运算符(+ - * /)、关系运算符(< > = =)、逻辑运算符、位运算符、移位运算符以及条件运算符等
二、算术运算符
1.基本四则运算符:加减乘除模(+ - * / %)
public class TestGq {public static void main(String[] args) {int i = 20;int m = 10;System.out.println(i+m);//30System.out.println(i-m);//10System.out.println(i*m);//200System.out.println(i/m);//2 在Java中除法的结果会取整数部分,小数点会丢弃System.out.println(i%m);//0 取模就是数学运算中除法的余数}
}
注意:
1.它们都是二元运算符,使用时必须要有左右两个操作数
2.int / int 结果还是int类型,而且会向下取整
如果要得到小数的方法是
public class TestGq {public static void main(String[] args) {int i = 3;int m = 2;double a = i*1.0/2;System.out.println(a);}
}
3.做除法和取模时,右操作数不能为0
4.% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的
5.两侧操作数类型不一致时,向类型大的提升
2.增量运算符(+= -= = /)
该种类型运算符操作完成后,会将操纵的结果赋值给左操作数
public class TestGq {public static void main(String[] args) {int i = 1;i+=1; //i=1+1System.out.println(i);//2i-=1; //i=2-1System.out.println(i);//1i*=2; //i=1*2System.out.println(i);//2i/=1; //i=2/1System.out.println(i);//2i%=1; //i=2%1System.out.println(i);//0}
}
注意:只有变量才能使用该运算符,常量不能使用
3.自增/自减运算符(++ --)
++是给变量的值+1,–是给变量的值-1
前置++是先给变量+1,然后再使用变量中的值
后置++是先使用变量原来的值,然后在表达式结束时给变量+1
前置–是先给变量-1,然后再使用变量中的值
后置–是先使用变量原来的值,然后在表达式结束时给变量-1
注意:
如果单独使用,前置++ 和 后置++ 没有任何区别
如果混合使用,前置++先+1,然后使用变量+1之后的值,后置++先使用变量原来的值,表达式结束时给变量+1
只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
三、关系运算符
关系运算符主要有六个: == != < > <= >= ,其计算结果是 true 或者 false
public class TestGq {public static void main(String[] args) {int a = 10;//在Java中 = 表示赋值int b = 20;System.out.println(a == b); // false 在Java中 == 表示相等System.out.println(a != b); // trueSystem.out.println(a < b); // trueSystem.out.println(a > b); // falseSystem.out.println(a <= b); // trueSystem.out.println(a >= b); // false}
}
注意:当需要多次判断时,不能连着写
四、逻辑运算符
逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型
1.逻辑&&
语法规则:表达式1 && 表达式2,左右表达式必须是boolean类型的结果
public class TestGq {public static void main(String[] args) {int a = 1;int b = 2;System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假}
}
2.逻辑||
语法规则:表达式1 || 表达式2,左右表达式必须是boolean类型的结果
public class TestGq {public static void main(String[] args) {int a = 1;int b = 2;System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假}
}
注意:左右表达式至少有一个位真,则结果为真
3.逻辑非!
语法规则:! 表达式
把真的变假,把假的变真
public class TestGq {public static void main(String[] args) {int a = 1;System.out.println(!(a == 1)); // a == 1 为true,取个非就是falseSystem.out.println(!(a != 1)); // a != 1 为false,取个非就是true}
}
4.短路求值
&& 和 || 遵守短路求值的规则
public class TestGq {public static void main(String[] args) {System.out.println(10 > 20 && 10 / 0 == 0); // 打印 falseSystem.out.println(10 < 20 || 10 / 0 == 0); // 打印 true}
}
注意:
1.对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
2.对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
3.& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值
这就是为什么10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行的原有
五、位运算
位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。
位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算
1.按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
2.按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
注意: 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算
3.按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
注意:
0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4个二进制位.
0xf 表示 10 进制的 15, 也就是二进制的 1111
printf 能够格式化输出内容, %x 表示按照十六进制输出.
\n 表示换行符
4.按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
注意:如果有两个数相同,则异或的结果位0
六、移位运算
移位运算符有三个: << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算的,并且打印是按照十六进制打印的
1.左移 <<: 最左侧位不要了, 最右侧补 0
注意:向左移位时,丢弃的是符号位,因此正数左移可能会变成负数
2.右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
3.无符号右移 >>>: 最右侧位不要了, 最左侧补 0
注意:
1.左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2.右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3.由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4.移动负数位或者移位位数过大都没有意义
七、条件运算符
条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法
public class TestGq {public static void main(String[] args) {int a = 10;int b = 20;int max = a > b ? a : b;System.out.println(max);}
}
注意:
1.表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
2.表达式不能单独存在,其产生的结果必须要被使用
八、运算符的优先级
运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可
相关文章:
关于Java中的运算符
文章目录 前言一、什么是运算符二、算术运算符1.基本四则运算符:加减乘除模( - * / %)2.增量运算符( - * /*)3.自增/自减运算符( --) 三、关系运算符四、逻辑运算符1.逻辑&&2.逻辑||3.逻辑非!4.短路求值 五、位运算六、移位运算七、条件运算符八…...

细说RTSP、RTMP和GB28181区别
好多流媒体初学者,对RTSP、RTMP和GB28181三者容易混淆,不了解他们的使用场景和区别,本文抛砖引玉,大概介绍下三者的区别。 RTSP(Real-Time Streaming Protocol)、RTMP(Real-Time Messaging Pro…...

Windows下安装Anaconda、Pycharm以及iflycode插件图解
目录 一、下载Anaconda、Pycharm以及iflycode插件 二、创建相关文件夹 三、Pycharm社区版安装详细步骤 四、Anaconda安装详细步骤 五、配置Pycharm 六、安装iflycode插件 Anaconda是一款集成的Python环境,anaconda可以看做Python的一个集成安装,安…...
Steger算法实现结构光光条中心提取(python版本)
Steger算法原理 对结构光进行光条中心提取时,Steger算法是以Hessian矩阵为基础的。它的基础步骤如下所示: 从Hessian矩阵中求出线激光条纹的法线方向在光条纹法线方向上将其灰度分布按照泰勒多项式展开,求取的极大值即为光条在该法线方向上的亚像素坐标。对于二维离散图像来…...
【完整解题】2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛B题 思路代码文章电商零售商家需求预测及库存优化问题
赛道 B: 电商零售商家需求预测及库存优化问题 问题背景: 电商平台存在着上千个商家,他们会将商品货物放在电商配套的仓库, 电商平台会对这些货物进行统一管理。通过科学的管理手段和智能决策, 大数据智能驱动的供应链可…...

服务网络基础
服务网络基础 目录 前言 从今天开始我们将进入服务网格的学习,服务网格是微服务架构中的一种重要的技术,它可以解决微服务架构中的一些问题,比如服务发现、服务治理、服务监控等等,我们将从服务网格的基础开始,逐步深…...

2016年亚太杯APMCM数学建模大赛C题影视评价与定制求解全过程文档及程序
2016年亚太杯APMCM数学建模大赛 C题 影视评价与定制 原题再现 中华人民共和国成立以来,特别是政治改革和经济开放后,随着国家经济的增长、科技的发展和人民生活水平的提高,中国广播电视媒体取得了显著的成就,并得到了迅速的发展…...

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (四)
这篇博客是之前文章: Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (二&a…...

YOLOv7优化:渐近特征金字塔网络(AFPN)| 助力小目标检测
💡💡💡本文改进:渐近特征金字塔网络(AFPN),解决多尺度削弱了非相邻 Level 的融合效果。 AFPN | 亲测在多个数据集能够实现涨点,尤其在小目标数据集。 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀…...

J2EE项目部署与发布(Windows版本)
🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 ,越幸运。 1.单机项目的部署 1.1们需要将要进行部署的项目共享到虚拟机中 在部署项目之前,我们先要检查一下…...
使用AWS Lambda函数的最佳实践!
主题 函数代码 函数配置 指标和警报 处理流 安全最佳实践 有关 Lambda 应用程序最佳实践的更多信息,请参阅 Serverless Land 中的 Application design。 函数代码 从核心逻辑中分离 Lambda 处理程序。这样您可以创建更容易进行单元测试的函数。在 Node.js 中…...

【计算机毕设小程序案例】基于SpringBoot的小演员招募小程序
前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 👉IT源码社-SpringBoot优质案例推荐👈 👉IT源码社-小程序优质案例…...

老年少女测试媛入职感想
作为一枚从事通信行业测试的老年少女测试媛,入职离职也有两三次了。现在又在一家企业入职了。虽然心里也清楚离职和入职,无非也就是从一个公司的坑里跳出来,再跳到另外一个公司的坑里罢了,明明知道老东家的坑是填不完的了…...

StreamSaver.js入门教程:优雅解决前端下载文件的难题
本文简介 点赞 关注 收藏 学会了 本文介绍一个能让前端优雅下载大文件的工具:StreamSaver.js ⚡️ StreamSaver.js GitHub地址⚡️ 官方案例 StreamSaver.js 可用于实现在Web浏览器中直接将大文件流式传输到用户设备的功能。 传统的下载方式可能导致大文件的加…...

element-ui vue2 iframe 嵌入外链新解
效果如图 实现原理 在路由中通过 props 传值 {path: /iframe,component: Layout,meta: { title: 小助手, icon: example },children: [{path: chatglm,name: chatglm,props: { name: chatglm,url: https://chatglm.cn },component: () > import(/views/iframe/common),me…...

win10 + VS2017 编译libjpeg(jpeg-9b)
需要用到的文件: jpeg-9b.zip win32.mak 下载链接链接:https://pan.baidu.com/s/1Z0fwbi74-ZSMjSej-0dV2A 提取码:huhu 步骤1:下载并解压jpeg-9b。 这里把jpeg-9b解压到文件夹"D:\build-libs\jpeg\build\jpeg-9b" …...

如何实现公网远程桌面访问Ubuntu?VNC+cpolar内网穿透!
文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…...
SpringMvc接收参数
接受参数:1.路径设置RequestMapping(value"地址",method"请求方式") 类|方法GetMapping PostMapping 方法2.接受参数[重点]param直接接收---handler(类型 形参名) 形参名请求参数名注解指定---handler(RequestParam(name"请求参…...

计算机网络文章荟萃
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?-网络编程/专项技术区 - 即时通讯开发者社区! 1.什么是 socket - 掘金2.socket 的实现原理 - 掘金本文讲述了 socket 在 linux 操作系统下的数据结构,以及阻塞 IO 利用…...

C# Socket通信从入门到精通(4)——多个异步TCP客户端C#代码实现
前言: 在之前的文章C# Socket通信从入门到精通(3)——单个异步TCP客户端C#代码实现我介绍了单个异步Tcp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步连接、异步发送、异步接收的操作,那么这时候我们使用之前单个…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 允许出现允许…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...

Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...

C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...