从初学者到专家:Java运算符的完整指南

目录

1.算数运算符

2.增量运算符 

2.1自增/自减运算符

4. 逻辑运算符

5.位运算符

6.移位运算符  

 7. 条件运算符



导言:
Java作为一门广泛使用的编程语言,其运算符是编写代码时必不可少的一部分。本篇博客将为你详细介绍Java中的各种运算符,从基础的算术运算符到高级的位运算符和三元运算符,为你打开运算符的奥秘之门。我们将通过代码示例和简单例子来帮助你更好地理解和应用这些运算符。

1.算数运算符

基本四则运算符:算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法、取模等。下面是一些常见的算术运算符及其用法:
int a = 10;
int b = 5;int sum = a + b;        // 加法运算
int difference = a - b; // 减法运算
int product = a * b;    // 乘法运算
int quotient = a / b;   // 除法运算
int remainder = a % b;  // 取余运算

注意事项:

1.都是二元运算符,使用时必须要有左右两个操作数

int a = 10;
int b = 5;int sum = a + b;        // 加法运算
int difference = a - b; // 减法运算
int product = a * b;    // 乘法运算
int quotient = a / b;   // 除法运算
int remainder = a % b;  // 取余运算

2.int / int 结果还是int类型,而且会向下取整

inta=3;
intb=2;
//在数学中应该是1.5但是在Java中输出结果为1会向下取整,即小数点之后全部舍弃掉了System.out.println(a/b);//如果要得到数学中的结果,可以使用如下方式
doubled=a*1.0/b;   //只要相乘数有一位数字是小数,结果就为小数
System.out.println(d);

3.做除法和取模时,右操作数不能为0

int a = 1;
int b = 0;
System.out.println(a / b)
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)

4.% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的

System.out.println(11.5 % 2.0);
// 运行结果
1.5

5.两侧操作数类型不一致时,向类型大的提升

System.out.println(1+0.2);
//+的左侧是int,右侧是double,在加之前int被提升为double型
//故输出1.2

2.增量运算符 

该种类型运算符操作完成后,会将 操纵的结果赋值给左操作数。
具体示例如下:
int a = 1;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出3a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出2a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6a /= 3; // 相当于 a = a / 3System.out.println(a); // 输出2a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出2
注意:只有变量才能使用该运算符,常量不能使用。

2.1自增/自减运算符

递增运算符有两种形式:前缀递增和后缀递增。 前缀递增运算符(++x) 将先将变量的值增加1,然后返回增加后的值。 后缀递增运算符(x++) 将返回变量的原始值,然后再将其增加1。递减运算符也有类似的前缀和后缀形式。
具体例子如下:
int x = 5;// 前缀递增
int y = ++x;
// y的值为6,x的值也为6// 后缀递增
int z = x++;
// z的值为6,x的值变为7// 前缀递减
int a = --x;
// a的值为6,x的值变为6// 后缀递减
int b = x--;
// b的值为6,x的值变为5

增量运算符在编程中常用于循环、条件语句和其他需要对变量进行递增或递减的场景。它们提供了一种简洁和方便的方式来更新变量的值。

3. 关系运算符

关系运算符用于比较两个值之间的关系,并返回一个布尔值(true或false)。下面是一些常见的关系运算符及其用法:

int a = 10;
int b = 5;boolean isEqual = a == b;      // 相等运算
boolean isNotEqual = a != b;   // 不相等运算
boolean isGreater = a > b;     // 大于运算
boolean isLess = a < b;        // 小于运算
boolean isGreaterOrEqual = a >= b; // 大于等于运算
boolean isLessOrEqual = a <= b;    // 小于等于运算

注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的。

4. 逻辑运算符

当需要在条件语句或布尔表达式中进行逻辑判断时,通过逻辑运算符来操作布尔值(true或false)。

1.逻辑与运算符(&&)
逻辑与运算符表示两个条件都必须为true时,整个表达式才为true。如果任意一个条件为false,则整个表达式为false。

boolean a = true;
boolean b = false;
boolean result = a && b;  // 结果为false,因为b为false

逻辑或运算符(||)
逻辑或运算符表示两个条件中至少一个为true时,整个表达式就为true。只有两个条件都为false时,整个表达式才为false。

boolean a = true;
boolean b = false;
boolean result = a || b;  // 结果为true,因为a为true

逻辑非运算符(!)
逻辑非运算符用于取反操作,将true变为false,将false变为true。

boolean a = true;
boolean result = !a;  // 结果为false,因为a为true

短路求值

逻辑与运算符(&&)和逻辑或运算符(||)都具有短路求值的特性。短路求值指的是当根据第一个条件的结果可以确定整个表达式的结果时,将不再计算第二个条件。

注意两点:

  1. 对于逻辑与运算符(&&),如果第一个条件为false,则整个表达式一定为false,不会执行第二个条件的计算。
  2. 对于逻辑或运算符(||),如果第一个条件为true,则整个表达式一定为true,不会执行第二个条件的计算。

boolean a = true;
boolean b = false;
boolean result = a || (b && someOtherCondition);  // 如果a为true,则整个表达式为true,不会计算第二个条件

作用:短路求值可以提高程序的性能,并且在某些情况下避免不必要的计算。逻辑运算符在控制流语句、条件语句和布尔表达式中起着重要的作用。它们允许我们进行复杂的逻辑判断和条件组合,从而控制程序的行为。了解逻辑运算符的含义和用法对于编写正确和可读性强的代码至关重要。

5.位运算符

按位与 &: 如果两个二进制对应位都是 1, 则结果为 1, 否则结果为 0 。

12 & 512:  00001100
5:   00000101
-------------00000100
结果: 00000100 (4)

按位或(|): 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1

12 | 512:  00001100
5:   00000101
--------------00001101
结果: 00001101 (13)

注意 :
当 & | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表 示逻辑运算.

按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
~1212:  00001100
------------
结果: 11110011 (-13)

注意事项:

1. 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进制位。
2. 0xf 表示 10 进制的 15, 也就是二进制的 1111。
3.printf 能够格式化输出内容, %x 表示按照十六进制输出
4.\n 表示换行符

 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1

12 ^ 512:  00001100
5:   00000101
--------------00001001
结果: 00001001 (9)

注意:如果两个数相同,则异或的结果为0 


6.移位运算符  

移位运算符有三个 : << , >>, >>> ,都是二元运算符,且都是按照二进制比特位来运算的。

 1. 左移 <<: 最左侧位不要了, 最右侧补 0.

12 << 212:  00001100
------------
结果: 00110000 (48)

2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0,负数补1) 

12 >> 212:  00001100
------------
结果: 00000011 (3)

3.无符号右移 >>>: 最右侧位不要了, 最左侧补 0.  

-12 >>> 2-12:  11110011
------------
结果: 00111100 (60)
注意:
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义.

 7. 条件运算符

条件运算符只有一个 : 三目运算符

结构为:条件 ? 结果1 : 结果2

如果条件为true,那么整个表达式的结果就是结果1;如果条件为false,则结果就是结果2。

可以将条件运算符理解为一个问答游戏。条件是一个问题,如果回答为true,我们就选择结果1作为答案;如果回答为false,我们就选择结果2作为答案。

这是一个具体的例子:
 

int age = 20;
String message = (age >= 18) ? "成年人" : "未成年人";

在上面的例子中,我们根据年龄的条件判断选择不同的信息。如果年龄大于或等于18岁,我们选择"成年人"作为信息;否则,我们选择"未成年人"作为信息。

好的,内容就到这里,如果以上有错误的地方恳请在评论区指出,如果我帮助到你,希望你也可以三连支持一下,谢谢。堆糖同学会很赞同的。

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

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

相关文章

突破笔试:力扣全排列(medium)

1. 题目链接&#xff1a;46. 全排列 2. 题目描述&#xff1a;给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[…

MATLAB|信号处理的Simulink搭建与研究

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ecology-自定义浏览按钮实现多处引用可定制不同查询条件。

1.新建ecode代码&#xff0c;前置加载&#xff0c;代码内容&#xff1a; ecodeSDK.overwritePropsFnQueueMapSet(WeaBrowser,{ //组件名fn:(newProps)>{ //newProps代表组件参数 if(newProps.type162 || newProps.type161){//console.log("自定义浏览框");if(!ne…

网易互娱出海之旅:大数据平台上云架构设计与实践

2020 年初&#xff0c;随着网易互娱的海外业务增长与海外数据合规的需求&#xff0c;我们开始了网易互娱大数据离线计算平台迁移出海的工作。前期&#xff0c;我们采取了云主机裸机加上高性能 EBS 块存储的方案。但是&#xff0c;这个方案存储费用高昂&#xff0c;成本是国内自…

Elasticsearch-查询

一、查询和过滤 1.1 相关性分数 &#xff1a;_score 默认情况下&#xff0c;Elasticsearch 按相关性得分对匹配的搜索结果进行排序&#xff0c;相关性得分衡量每个文档与查询的匹配程度。 相关性分数是一个正浮点数&#xff0c;在搜索的数据字段中返回。_score越高&#xff0…

记一件异常访问记录

一、问题描述 某安全护网期间&#xff0c;web日志中大量出现异常账户请求&#xff0c;虽然报404错误&#xff0c;但是不同异常账号的连续尝试在特殊时期&#xff0c;还是令人担忧. 进程如下&#xff1a;/usr/bin/python2 -Es /usr/sbin/tuned -l -P 二、处理及说明 1&#x…

GPU虚拟化理解包含直通,k8s安装,GPU-manager

什么是VGPU? vGPU&#xff0c;即真正意义上的GPU虚拟化方案&#xff0c;就是将一块GPU卡的计算能力进行切片&#xff0c;分成多个逻辑上虚拟的GPU&#xff0c;以vGPU为单位分配GPU的计算能力&#xff0c; 并将单块GPU卡分配给多台虚拟机使用&#xff0c;使得虚拟机能够运行3D…

基于Spring Boot的招聘网站的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的招聘网站的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springboot框…

windows系统安装ElasticSearch7.9.3笔记

windows系统安装ElasticSearch7.9.3笔记 从es中文社区 或elastic官网下载安装包 ES中文社区-浏览器地址https://elasticsearch.cn/download/ 下载7.9.3版本的相关安装包 下载的安装包清单如下 开始配置使用带ik分词器和拼音分词器的ES7.9.3 分别解压这3个zip 拷贝ik分词器…

logstash 采集 docker 日志

1、nginx容器部署 参考&#xff1a;nginx容器部署 将容器内的nginx日志文件映射到宿主机/home/logs/nginx目录下 注意&#xff1a;并且需要需要将日志的输出格式修改为json 2、编辑vim /opt/logstash-7.4.2/config/nginx-log-es.conf 文件&#xff0c;收集docker nginx容器日…

kubernetes的存储卷使用

目录 一、为什么使用存储卷 二、emptyDir存储卷 1.概念 2.创建Pod emptyDir 3. 验证emptyDir存储卷 三、hostPath存储卷 1.概念 2.创建Pod hostPath 3.验证hostPath存储卷 三、nfs共享存储卷 1.概念 2.安装nfs&#xff0c;配置nfs服务 3.创建Pod 4.验证nfs存储卷 一、…

Redis_概述

1.redis概述 1.1 简介 截止到2021年12月 数据库排名https://db-engines.com/en/ranking redis(Remote Dictionary Server) 一个开源的key-value存储系统它支持存储的Value类型&#xff1a;包括String(字符串),list(链表),set(集合),zset(sorted set 有序集合),hash(哈希类型…