【Java基础学习打卡18】运算符(上)

目录

  • 前言
  • 一、运算符和表达式
    • 1.运算符
    • 2.表达式
  • 二、算术运算符
    • 1.加法运算符
    • 2.减法运算符
    • 3.乘法运算符
    • 4.除法运算符
    • 5.取余运算符
    • 6.表达式类型自动提升
  • 总结


前言

本文主要介绍运算符和表达式,及运算符中的算术运算符。在 Java 编程中,运算符起着非常重要的作用,它们用于对数据进行操作和计算。运算符可以帮助我们进行数学运算、逻辑判断、赋值操作等,是编写复杂程序和表达式的基础。


一、运算符和表达式

1.运算符

运算符是一种用来执行特定操作的符号或符号组合。 在计算机编程中,运算符用于操作数(变量、常量或表达式)之间的运算,以产生一个结果。

常见的运算符包括:

  • 算术运算符
  • 赋值运算符
  • 自增自减运算符
  • 关系运算符
  • 逻辑运算符
  • 三元运算符

这只是一部分常见的运算符,不同的编程语言可能会有更多特定的运算符。在编程中,合理使用运算符可以实现各种复杂的计算和逻辑操作。

2.表达式

表达式是由操作数和运算符组成的代码结构,用于计算一个值。 表达式能够执行诸如数学运算、逻辑判断、变量赋值等各种计算操作。

int a = 10;
int b = 20;
int c = a + b;

在上述代码中,定义了 ab 变量,也就是操作数,在代码 int c = a + b; 中,+ 号是运算符,并且是算术运算符,表示相加。那么 a+b 就是表达式,由于使用 + 号这个算术运算符,所以这个表达式叫做算术表达式。

Java 语言支持多种类型的表达式,包括算术表达式、关系表达式、逻辑表达式、赋值表达式等。

二、算术运算符

算术运算符用于执行基本的数学运算,Java 是支持所有的基本算术运算符的,包括加(+)、减(-)、乘(*)、除(/)、取余(%)。

1.加法运算符

加法运算符(+):用于执行加法运算,将两个操作数相加并返回结果。

public static void main(String[] args) {// 定义两个整型变量int a = 10;int b = 20;// 进行加法运算,结果为30int c = a + b;System.out.println(c);
}

+ 号除了有加法运算功能外,还可以作为字符串的连接符。

public static void main(String[] args) {int a = 10;System.out.println("你的等级为:" + a);	
}

运行结果为:
在这里插入图片描述
当加号(+)的其中一个操作数是字符串时,Java 会自动将另一个操作数转换为字符串,然后执行字符串的连接操作。

2.减法运算符

减法运算符(-):用于执行减法运算,将第一个操作数减去第二个操作数并返回结果。

public static void main(String[] args) {// 定义两个整型变量int a = 10;int b = 20;// 进行减法运算,结果为-10int c = a - b;System.out.println(c);	
}

3.乘法运算符

乘法运算符(*):用于执行乘法运算,将两个操作数相乘并返回结果。注意这里的乘法运算符是星号(*),不是数学中的乘号(x)。

public static void main(String[] args) {// 定义两个整型变量int a = 10;int b = 20;// 进行乘法运算,结果为200int c = a * b;System.out.println(c);	
}

4.除法运算符

除法运算符(/):用于执行除法运算,将第一个操作数除以第二个操作数并返回结果。要注意这里的除法运算符号是(/),不是数学中的除号( ÷ \div ÷)。

还有几点需要注意:

  • 当除法运算符的两个操作数都是整数类型,那么计算结果也是整数,这是结果值会直接截断,取整数部分。
  • 当除法运算符的两个操作数有一个浮点类型,或两个都是浮点类型,则计算结果也是浮点类型,即整数带小数。
  • 当除法运算符的两个操作都是整数类型,除数不可以为 0,程序运行报错:/ by zero
  • 当除法运算符的两个操作数有一个浮点类型,或两个都是浮点类型,除数可以是 0 或 0.0,计算结果为 Infinity(无穷)。
public static void main(String[] args) {// 操作数都为整数类型int a = 3;int b = 2;int c = a / b;// 计算结果为1,只取整数部分,不进行四舍五入System.out.println(c);// 除数不能为0,否则运行报错java.lang.ArithmeticException: / by zero//System.out.println(a / 0);// 操作数至少有一个为浮点类型float x = 1.8f;float y = 0.7f;float z = x / y;// 计算结果有小数部分,但要注意浮点类型的精度System.out.println(z);// 结果为InfinitySystem.out.println(x / 0);	
}

运行结果为:

在这里插入图片描述

5.取余运算符

取余运算符(%):也叫取模运算符,用于执行取余运算,将第一个操作数除以第二个操作数并返回余数。

取余运算是在两个数相除得到的结果取余数部分,所以取余运算先要进行除法运算,那么除法中的注意事项在取余运算中同样生效,只不过当取余运算符的两个操作数有一个浮点类型,或两个都是浮点类型,除数可以是 0 或 0.0,计算结果为 NaN(非数)。

public static void main(String[] args) {// 操作数都为整数类型int a = 3;int b = 2;int c = a % b;// 计算结果为1,只取余数部分System.out.println(c);// 除数不能为0,否则运行报错java.lang.ArithmeticException: / by zero//System.out.println(a % 0);// 操作数至少有一个为浮点类型float x = 1.8f;float y = 0.7f;float z = x % y;// 计算结果为小数,但要注意浮点类型的精度System.out.println(z);// 结果为NaNSystem.out.println(x % 0);	
}

运行结果为:

在这里插入图片描述

6.表达式类型自动提升

在 Java 中,表达式类型自动提升是指在进行运算时,如果两个操作数具有不同的数据类型,Java 会根据一定的规则将其中一个操作数的类型转换为另一个操作数的类型,以便进行运算。

具体自动提升规则如下:

  • byteshortchar 类型提升为 int 类型
  • 整个算术表达式的数据类型自动提升到表达式中最高等级操作数相同的类型,等级顺序为:byte、short、char→int→long→float→double

如果两个操作数的类型不同,但它们都是整数类型,Java 会将它们都转换为更高精度的整数类型。例如,byteint 相加时,byte 会被自动提升为 int 类型。

byte a = 5;
int b = 10;
int c = a + b; // byte类型的a会被自动提升为int类型

如果一个操作数是整数类型(byteshortintlong),另一个操作数是浮点数类型(floatdouble),则整数类型会被自动提升为浮点数类型。这是因为浮点数类型的表示范围更广。

int a = 5;
double b = 3.14;
double result = a + b; // int类型的a会被自动提升为double类型

如果一个操作数是整数类型,另一个操作数是 char 类型,那么 char 类型会被自动提升为整数类型。

int a = 65;
char b = 'A';
int c = a + b; // char类型的b会被自动提升为int类型

需要注意的是,自动提升只是临时性地将操作数的类型提升为适合的类型用于计算,并不会改变操作数本身的类型。因此,如果需要将提升后的结果赋值给原始类型的变量,可能需要进行强制类型转换。

自动提升在 Java 中确保了在运算时数据的精度和范围不会丢失,同时提供了更灵活的表达式计算。


总结

运算符是一种用来执行特定操作的符号或符号组合。而表达式是由操作数和运算符组成的代码结构,用于计算一个值。注意表达式只能产生一个值。

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

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

相关文章

Java 使用 Google Guava 实现接口限流

一、引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version> </dependency>二、自定义注解及限流拦截器 自定义注解&#xff1a;Limiter package com.haita…

安装requests模块及其他依赖库的完美解决办法

业务场景 导入requests库时报错&#xff0c;单独离线下载安装requests&#xff0c;发现仍然报错&#xff0c;问题在于requests库有其他依赖库。 WARNING: Retrying (Retry(total1, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnect…

PgSQL-使用技巧-如何衡量网络对性能的影响

PgSQL-使用技巧-如何衡量网络对性能的影响 PG数据库和应用之间常见的部件有连接池、负载平衡组件、路由、防火墙等。我们常常不在意或者认为涉及的网络hops对整体性能产生的额外开销是理所当然的。但在很多情况下&#xff0c;它可能会导致严重的性能损失和拖累整体吞吐量。相当…

Set集合类详解(附加思维导图)

目录 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 2.2、TreeSet集合的使用 三、HashSet、LinkedHashSet、TreeSet的使用场景 四、list和set集合的区别 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 ①&#xff1a;add…

redis面试1

Redis基础面试题 1、为什么要使用Redis做缓存 缓存的好处 使用缓存的目的就是提升读写性能。而实际业务场景下&#xff0c;更多的是为了提升读性能&#xff0c;带来更好的性 能&#xff0c;带来更高的并发量。Redis 的读写性能比 Mysql 好的多&#xff0c;我们就可以把 Mysq…

【小白必看】利用Python生成个性化名单Word文档

文章目录 前言所需文件及文件格式说明excel数据如下word 模板如下文件目录格式及生成后的文件 导入所需的模块&#xff1a;打开 Excel 文件&#xff1a;选择工作表&#xff1a;获取数据列表&#xff1a;遍历数据并生成 Word 文档&#xff1a;完整代码结束语 前言 对于需要批量…

【MyBatis 学习一】认识MyBatis 第一个MyBatis查询

目录 一、认识MyBatis 1、MyBatis是什么&#xff1f; 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目 3、xml文件配置 &#xff08;1&#xff09;配置数据库连接 &#xff08;2&#xff09;配置 MyBatis 中的 XML 路径 三、测试&#x…

mysql(三)用户权限管理

目录 前言 一、概述 二、用户权限类型 三、用户赋权 四、权限删除 五、删除用户 前言 为什么要设置用户权限&#xff1f; MySQL设置用户管理权限的主要目的是为了确保数据库的安全性和数据的机密性。以下是一些原因&#xff1a; 1. 安全性&#xff1a;MySQL是一个开源的关系型…

Java集合之List

ArrayLsit集合 ArrayList集合的特点 ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素&#xff0c;index从0开始。 public class Test {public static void m…

dependency walker工具简介及使用

dependency walker工具 简介使用 简介 官方概述&#xff1a; Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. For each module found, …

C++ 核心编程

一、 内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理 全局区&#xff1a;存放全局变量和静态变量以及常量 栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值、…

gensim conherence model C_V 值与其他指标负相关BUG

在我用gensim3.8.3 conherence model分析京东评论主题模型时&#xff0c; C_V 与npmi、u_mass出现了强烈的皮尔逊负相关&#xff1a; 这些地方也反映了类似问题&#xff1a; https://github.com/dice-group/Palmetto/issues/12 https://github.com/dice-group/Palmetto/issue…

测等保2.0——安全区域边界

一、前言 今天我们来说说安全区域边界&#xff0c;顾名思义&#xff0c;安全区域边界就是保障网络边界处&#xff0c;包括网络对外界的边界和内部划分不同区域的交界处&#xff0c;我们的重点就是查看这些边界处是否部署必要的安全设备&#xff0c;包括防火墙、网闸、网关等安…

git相关

gerrit用户指南&#xff1a; 资料&#xff1a;Gerrit 用户指南 gerrit-user-guide 上述有介绍如何review&#xff0c;review并非修改代码之后如何重新提交等操作 jenkins介绍 Jenkins详细教程 - 知乎 一、jenkins是什么&#xff1f; Jenkins是一个开源的、提供友好操作界…

使用Ensp配置DHCP协议

如何使用Ensp配置DHCP协议&#xff0c;为PC自动分配IP地址 什么是DHCP&#xff1f; Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff0c;简单理解为自动分配IP地址&#xff0c;有了这个协议就不用手动配置IP地址了&#xff0c;如图 思路 给路由…

Ubuntu 上编译protobuf 指

欢迎大家关注我的B站主页MYVision_MY视界的个人空间-MYVision_MY视界个人主页-哔哩哔哩视频 下载protobuf GitHub - protocolbuffers/protobuf: Protocol Buffers - Googles data interchange format 根据需要从release 中下载指定的版本 下载完之后&#xff0c;根据提供的C…

Godot 4 着色器 - Shader调试

我之前用OpenCV进行图像相关处理&#xff0c;觉得已经很不错&#xff0c;结合GDI可以实现流畅的动画效果 直到近来用Shader后才发现&#xff0c;着色器更上一层楼&#xff0c;原来这是入了GPU的坑 Shader编程限制很多&#xff0c;各种不支持&#xff0c;看在它性能不错功能炫…

发布npm包流程

发布npm包的步骤如下&#xff1a; 在终端中通过 npm init 命令创建一个新的npm包&#xff0c;按照提示填写包的信息&#xff0c;如包名称、版本、描述、作者、许可证等。 在包的根目录下创建一个 index.js 文件&#xff0c;编写你的代码。 确认你已经注册了npm账号&#xff0…

mysql进阶2——prosysql实现mysql读写分离

文章目录 一、读写分离方案类型1.1 最简单的读写分离1.2 多个读组或写组的分离模式 二、案例2.1 初始化操作2.2 mysql主添加proxysql连接用户2.3 Proxysql添加连接mysql集群参数2.4 添加健康检测用户2.5 添加读写分离的路由规则2.6 验证 一、读写分离方案类型 基本了解&#xf…

pytorch工具——pytorch中的autograd

目录 关于torch.tensor关于tensor的操作关于梯度gradients 关于torch.tensor 关于tensor的操作 x1torch.ones(3,3) xtorch.ones(2,2,requires_gradTrue) print(x1,\n,x)yx2 print(y) print(x.grad_fn) print(y.grad_fn)zy*y*3 outz.mean() print(z,out)注意 atorch.randn(2,…