Java-运算符
一、运算符是什么?
其实就如字面意思一样啦~就像数学中的运算符一样:(" + "," - "," * "," / "," % "...)。
计算机的用途就如其名:运算。而既然要运算,肯定就需要运算符。
而在Java中也提供了非常多的运算符来操控变量,而其中的运算符基本可以分为以下六种:
1. 算术运算符
2. 比较运算符
3. 逻辑运算符
4. 位运算符
5. 位移运算符
6. 条件运算符(三元运算符)
二、算数运算符
① 四则运算符
算术运算符:包括加法运算符(+)、减法运算符(-)、乘法运算符(*)、除法运算符(/)、取余运算符(%)等,用于进行基本的数学运算。
加法运算符(+):用于将两个数相加。 例如:int a = 5 + 3; // a的值为8
减法运算符(-):用于将一个数减去另一个数。 例如:int b = 7 - 2; // b的值为5
乘法运算符(*):用于将两个数相乘。 例如:int c = 4 * 6; // c的值为24
除法运算符(/):用于将一个数除以另一个数。注意,如果除法操作涉及整数,结果将被截断为整数。 例如:int d = 10 / 3; // d的值为3
取模运算符(%):用于计算两个数的除法余数。 例如:int e = 10 % 3; // e的值为1
📚 代码演示:
import java.util.*;public class Main {public static void main(String[] args) {Scanner num = new Scanner(System.in);int n = num.nextInt();System.out.println(n+5);System.out.println(n-5);System.out.println(n*5);System.out.println(n/5);System.out.println(n%5);}
}
由此我们便能看出(" + "," - "," * "," / "," % ")的作用就是"相加","相减","相乘","相除","取余",是与数学中的用法一致的。
📌 而对于这些算数操作符,有以下注意事项:
📕 以上运算符都是二元运算符,使用时必须有左右两个操作数。
📕 int / int 结果还是 int 类型,而且会向下取整。
📕 int 型 2 / 3 得到的是 1 而非 1.5。(小数点后舍弃)
📕 做除法和取模时,右操作数不能为0。
📕 % 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的。
📕 两侧操作数类型不一致时,向类型大的提升。
② 增量运算符
而除了此类比较简单的算术操作符以外,还有一些编译器中的语言,如增量运算符。
📚 其实很简单,只是上述四则运算中的简化版本:
import java.util.*;public class Main {public static void main(String[] args) {Scanner num = new Scanner(System.in);int n = num.nextInt();n += 5;//n = n + 5System.out.println(n);n -= 2;//n = n - 2System.out.println(n);n *= 3;//n = n * 3System.out.println(n);n /= 3;//n = n / 3System.out.println(n);n %= 2;//n = n % 2System.out.println(n);}
}
" += "," -= "," *= "," /= "," %= "都是直接改变操作变量,运算结束后将结果赋值给左操作数。
📌 注意事项:
📕 只有变量才能使用该运算符,常量不能使用。
③ 自增/自减操作符
自增,自减操作符分别是" ++ "," -- ",作用分别是使变量+1和变量-1。
Java中的增量运算符有两种形式:前缀形式和后缀形式。
📌 前缀形式:
📕 ++ :递增操作符,将操作数的值加1,并返回加1后的值。
📕 -- :递减操作符,将操作数的值减1,并返回减1后的值。
📚 代码演示:
public class Main {public static void main(String[] args) {int i = 0;if(++i == 0)System.out.println("Yes");elseSystem.out.println("No");}
}
注意,前置" ++ "代表将此变量 +1 后直接使用该变量(否则则会打印"Yes")。
public class Main {public static void main(String[] args) {int i = 1;if(--i == 0)System.out.println("Yes");elseSystem.out.println("No");}
}
注意,前置" -- "代表将此变量 -1 后直接使用该变量(否则则会打印"No")。
📌 后缀形式:
📕 ++ :递增操作符,将操作数的值加1,并返回加1之前的值。
📕 -- :递减操作符,将操作数的值减1,并返回减1之前的值。
📚 代码演示:
public class Main {public static void main(String[] args) {int i = 0;if(i++ == 0)System.out.println("Yes");elseSystem.out.println("No");}
}
注意,后置" ++ "先使用未自增的变量,而后再将变量 +1(否则则会打印"No")。
public class Main {public static void main(String[] args) {int i = 1;if(i-- == 0)System.out.println("Yes");elseSystem.out.println("No");}
}
注意,后置" -- "先使用未自增的变量,而后再将变量 -1(否则则会打印"Yes")。
三、关系运算符
Java中的关系运算符包括以下几种:
等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
这些运算符用于比较两个操作数的关系,并返回一个布尔值,表示比较结果的真或假。比较操作符通常用于条件语句、循环语句等控制结构中,用于确定程序的执行流程。
📚 代码演示:
public class Main {public static void main(String[] args) {int a = 1;int b = 2;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);}
}
📌注意:当需要多次判断时不能连着写,比如:7 < a < 19 是不行的。
四、逻辑运算符
Java中的逻辑运算符有以下几种:
📕 与运算符(&&):当且仅当两个操作数都为true时,结果为true;否则结果为false。
📕 或运算符(||):当且仅当两个操作数都为false时,结果为false;否则结果为true。
📕 非运算符(!):用于取反,当操作shu数为true时,结果为false;当操作数为false时,结果为true。
逻辑运算符通常用于条件判断或控制流程中,可以用来组合多个条件或将条件取反。
📚 代码演示:
public class Main {public static void main(String[] args) {int a = 1;int b = 2;if(a == 1 || b == 3)System.out.println("Yes");}
}
(这是因为两种条件中有一方为真,所以就运行if语句,并且打印"Yes")
但如果将" || "改成" && ",就能够发现:什么都不会打印出来了,因为" && "必须两个条件都符合。
📌 需要注意的是,逻辑运算符有" 短路规则 ":
📕 短路原则:在逻辑运算符( && 和 || )中,如果根据左侧操作数的值可以确定整个表达式的结果时,右侧操作数将不会被执行。
📚 代码演示:
public class Main {public static void main(String[] args) {int a = 10;int b = 20;if(a == 10 || false)System.out.println("Yes");}
}
我们知道,false代表假,如果操作到了false,便不会输出,而最后还是输出了"Yes"。
(如果是C/C++语言环境下,可以通过" ++ "," -- "来进行演示,但Java不可以,因为Java语言拥有较强的严谨性,而且 boolean 只有 " true "与" false ",并不是" 0 "与" 非0 ")
📌 而"!"的作用是:使" 真变假 "," 假变真 "。
📚 代码演示:
public class Main {public static void main(String[] args) {int a = 10;System.out.println("使用!前:");System.out.println(!(a == 10));System.out.println(!(a != 10));System.out.println("使用!后:");System.out.println((a == 10));System.out.println((a != 10));}
}
五、位运算符
📌 Java中的位运算符包括以下几种:
📕 位与运算符(&):对两个操作数的每个位执行逻辑与操作,只有当两个位都为1时,结果才为1,否则为0。
📕 位或运算符(|):对两个操作数的每个位执行逻辑或操作,只要两个位中有一个为1时,结果就为1,否则为0。
📕 位异或运算符(^):对两个操作数的每个位执行逻辑异或操作,只有当两个位不相同时,结果才为1,否则为0。
📕 位非运算符(~):对操作数的每个位执行逻辑非操作,将1变为0,将0变为1。
① 位与运算符(&)
📌 同为1才为1,否则为0;
public class Main {public static void main(String[] args) {int a = -5;int b = 7;System.out.println(a&b);}
}
int型在32位机器上占四个字节,那么高位补零,让我们看一下-5和7的原码:
a->10000000000000000000000000000101b->00000000000000000000000000000111
分别求出a和b的补码,先对原码取反,然后再对反码+1。
a->1000000000000000000000000000010111111111111111111111111111111010//求反11111111111111111111111111111011//+1,补码
b->00000000000000000000000000000111//正数的补码与反码相同
//&:同为1才为1,否则为0;
得 a&b为00000000000000000000000000000011//输出结果为3
② 位或运算符(|)
📌 有1就为1;
接下来我们看|(或)操作符,同样是a与b的补码来进行计算
11111111111111111111111111111011//a补码
00000000000000000000000000000111//b反码
//|(或)操作符:有1就为1;
a|b->11111111111111111111111111111111//(还得取反+1变成原码才行)->10000000000000000000000000000000->10000000000000000000000000000001//输出-1
③ 位异或运算符(^)
📌 不同为1,否则为0;
接下来我们看^(异或)操作符,同样是用a与b的补码来进行计算
11111111111111111111111111111011//a补码
00000000000000000000000000000111//b反码
//^(异或):不同为1,否则为0;
a^b->11111111111111111111111111111100//(还得取反+1变成原码才行)->10000000000000000000000000000011->10000000000000000000000000000100//输出-4
④ 位非运算符(~)
📌 按位取反,0变1,1变0;
这个与前三种不太一样,就是字面意思的取反效果,我们换一个表达式来体现它的效果和作用。
public class Main {public static void main(String[] args) {System.out.println(~0);//00000000000000000000000000000000//取反//11111111111111111111111111111111(再取反+1)//10000000000000000000000000000001(-1)}
}
注意:如果两个数相同,则异或的结果为0
六、移位运算
📌 移位运算符有以下几种:
📕 左移运算符(<<):将操作数的所有位向左移动指定的位数,左移n位相当于乘以2的n次方。
📕 右移运算符(>>):将操作数的所有位向右移动指定的位数,右移n位相当于除以2的n次方。
📕 无符号右移运算符(>>>):将操作数的所有位向右移动指定的位数,并在左侧插入0,无符号右移不考虑符号位,即使是负数也将其当作正数处理。
① 左移操作符(<<)
左移操作符使二进制数向左移动1位,那么最左边的数就被挤出去了,而右边也是同理,光说可能不太明白,没关系,我们看个图。
像这样就是一个为10的数字向左位移1位的样子了。
📚 代码演示:
public class Main {public static void main(String[] args) {int num = 10;num = num << 1;System.out.println(num);}
}
有没有发现什么?向左位移一次就让结果变成了2倍,这是巧合吗?让我们再试一次:
public class Main {public static void main(String[] args) {int num = 10;int i = 0;for(i = 0;i < 10;i++) {num = num << 1;System.out.println(num);}}
}
看来往左移动多少位,数字就会乘以相应次数的2~
② 右移操作符(>>)
📌 和左移操作符基本一样,有一点不同的是:左移操作符是向右补位,没有正负之分,而右移操作符是向左补位,有正负之分,于是右移操作符有两种形式。
逻辑右移:左边用0补充,右边丢弃。
算术右移:左边用原来的符号位补充,右边丢弃。
(还需要注意的是位移操作符不能移动负数位)
📚 代码演示:
public class Main {public static void main(String[] args) {int num = 5120;int i = 0;for(i = 0;i < 10;i++) {num = num >> 1;System.out.println(num);}}
}
③ 无符号右移运算符(>>>)
📌 最右侧不要了,最左侧补0;
public class Main {public static void main(String[] args) {int a = 0xffffffff;System.out.printf("%x\n", a >>> 1);// 运行结果(注意, 是按十六进制打印的)}
}
七、条件运算符
Java条件运算符是用于在条件表达式中进行判断和选择的特殊运算符,只有一个:
三目运算符: 三目运算符用于根据条件的真假来选择两个不同的值。
语法:条件表达式 ? 表达式1 : 表达式2
如果条件表达式为真,则返回表达式1的值;如果条件表达式为假,则返回表达式2的值。
📚 代码演示:
public class Main {public static void main(String[] args) {int a = 10;int b = 20;int max = a > b? a :b;System.out.println(max);}
}
📌 注意事项:
📕 表达式1和表达式2的结果要是同类型的,除非能发生类型隐式类型转换。
📕 表达式不能单独存在,其产生的结果必须要被使用。
那么关于Java语言中运算符的相关知识就为大家讲解到这里啦,作者能力有限,如果有什么讲的不够清楚或者不够正确的地方,还请大家多多指出,那么我们下次再见啦~
相关文章:

Java-运算符
一、运算符是什么? 其实就如字面意思一样啦~就像数学中的运算符一样:(" "," - "," * "," / "," % "...)。 计算机的用途就如其名:运算。而既然要运算…...

ubutun nginx 安装和解决端口占用问题
目录 一、删除已有nginx 二、安装nginx 三、端口占用问题 分析问题 解决方法:更换默认端口 nginx是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(I…...

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习01(环境准备)
1 准备工作 由于创建数据中心需要安装很多服务器,这些服务器要耗费很所物理物理计算资源、存储资源、网络资源和软件资源,作为穷学生只有几百块的n手笔记本,不可能买十几台服务器来搭建数据中心,也不愿意跑实验室,想躺…...

解决:使用layui.treeTable.updateNode,更新表格数据后,done里面的事件丢失问题
1. 背景 在给树形表格添加行点击事件,并且只更新当前行数据。 treeTable.updateNode("SpeProjListId", result.LAY_DATA_INDEX, result);更新数据后,点击事件失效。 1. 给字段绑定事件: class"link_a link_style" , {…...

【Linux】环境变量(初步认识环境变量)
文章目录 1. 环境变量1.1 基本概念 2. 认识常见环境变量2.1 PATH2.2 HOME2.3 SHELL2.4 PWD2.5 USER 3. 理解环境变量 1. 环境变量 在main函数的命令行参数中,有argc、argv、env三个参数。 argc:命令行参数的个数argc:存放每个参数的具体数值…...

79. 单词搜索
思路 每次以当前位置为初始位置开始遍历,看是否找到单词 (以官方题解做出) v:代表等于work[k]且已走过的位置 d:四个方向 回溯(遍历): 匹配不上:终止 找到了:终止(先…...
[单master节点k8s部署]28.Istio流量管理(四)
金丝雀发布实验 部署两个pod,他们分别是canary-v1和canary-v2。 随后进行service的部署: apiVersion: v1 kind: Service metadata:name: canary-svc34namespace: default spec:selector:apply: canaryports:- port: 80protocol: TCPtargetPort: 80进行…...

Windows 11 安装配置 Git 教程
目录 Git Windows 11 环境安装配置 Git Git Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行的版本控制系统,广泛应用于软件开发中。 以下是Git的一些关键特…...

Go基础学习11-测试工具gomock和monkey的使用
文章目录 基础回顾MockMock是什么安装gomockMock使用1. 创建user.go源文件2. 使用mockgen生成对应的Mock文件3. 使用mockgen命令生成后在对应包mock下可以查看生成的mock文件4. 编写测试代码5. 运行代码并查看输出 GomonkeyGomonkey优势安装使用对函数进行monkey对结构体中方法…...
PHP基础教程
PHP基础教程 1. PHP简介 PHP是一种广泛使用的开源服务器端脚本语言,它特别适用于网页开发,并可嵌入到HTML中使用。 2. PHP环境搭建 Windows: 可以使用XAMPP或WAMP。Mac: 可以使用MAMP。Linux: 可以使用XAMPP或LAMP。 3. 第一个PHP程序 创建一个名为…...

Python或R时偏移算法实现
🎯要点 计算单变量或多变量时序距离,使用欧几里得、曼哈顿等函数量化不同时序差异。量化生成时序之间接近度相似性矩阵。使用高尔距离和堪培拉距离等相似度测量。实现最小方差匹配算法,绘制步进模式的图形表示。其他语言包算法实现。 &…...

华为云LTS日志上报至观测云最佳实践
华为云LTS简介 华为云云日志服务(Log Tank Service,简称 LTS),用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、…...
Python--加载Hugging Face模型文件异常处理
尝试加载 Hugging Face 模型的配置文件时,无法从 https://huggingface.co 获取所需的 config.json 文件。这个错误通常是由于网络连接问题、访问受限或路径配置错误导致的。让我们一步步分析并解决这个问题。 可能原因及解决方案: 网络连接问题…...
补码加/减运算的具体示例
补码加法运算示例 示例:计算两个十进制数的和,35 18,假设使用8位二进制表示。 1、求原码: 35的原码:00100011 18的原码:00010010 2、求补码(对于正数,补码与原码相同࿰…...

macOS编译和运行prometheus2.54
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文详述了在macOS(M2芯片)上编译和运行prometheus2.54版本的过程,以及安装node_exporter和grafana并使用prometheus指标进行展示 本地…...
flume系列之:flume jmx页面导出flume、java进程等全部指标
flume系列之:flume jmx页面导出flume、java进程等全部指标 一、需求背景二、完整的jmx指标信息三、修改jmx指标导出规则四、启动jmx导出程序一、需求背景 目前jmx页面指标只导出了flume相关的指标,现在需要导出java相关的指标二、完整的jmx指标信息 主要有flume指标java进程指…...

(17)MATLAB使用伽马(gamma)分布生成Nakagami-m分布的方法1
文章目录 前言一、使用伽马分布生成Nakagami分布随机变量的方法一二、MATLAB仿真代码后续 前言 MATLAB在R2013a版本中引入Nakagami分布对象,可以用来生成Nakagami随机变量。但是在更早的MATLAB版本中,并没有可以直接生成 Nakagami分布的随机变量的内置的…...
NFT 是什么?
NFT 是什么? NFT,全称Non-Fungible Token,即“非同质化代币”,是一种基于区块链技术的独特数字资产。NFT的核心特性在于其唯一性、不可分割性和不可替代性,这使其与传统的加密货币(如比特币、以太坊等)形成了鲜明的对比。比特币等加密货币是同质化的,每个单位之间可以…...

mysql的学习
垂直连接union join是水平连接,UNION 是垂直连接,它是把两张表的结果集按列堆叠,行数增加了,但列数保持不变。 UNION 垂直连接的作用 在 MySQL 中,UNION 可以将两个具有相同列数且列数据类型兼容的查询结果合并在一…...

微服务之间的相互调用的几种常见实现方式对比
目录 微服务之间的相互调用的几种实现方式 一、HTTP HTTP/RESTful API调用工作原理 二、RPC 设计理念与实现方式 协议与传输层 RPC远程调用工作原理 应用场景与性能考量 特点 三、Feign 设计理念与实现方式 协议与传输层 Feign调用的基本流程 Feign调用的工作原理…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...