2.3java运算符

运算符

1. 算术运算符

算术运算符用于执行基本的数学运算,像加、减、乘、除等。

运算符描述示例
+加法int a = 5 + 3; // a 的值为 8
-减法int b = 5 - 3; // b 的值为 2
*乘法int c = 5 * 3; // c 的值为 15
/除法int d = 6 / 3; // d 的值为 2
%取模(取余)int e = 7 % 3; // e 的值为 1
++自增int f = 5; f++; // f 的值为 6
--自减int g = 5; g--; // g 的值为 4

2. 赋值运算符

赋值运算符用于给变量赋值。

运算符描述示例
=简单赋值int a = 5; // a 的值为 5
+=加后赋值int b = 5; b += 3; // b 的值为 8
-=减后赋值int c = 5; c -= 3; // c 的值为 2
*=乘后赋值int d = 5; d *= 3; // d 的值为 15
/=除后赋值int e = 6; e /= 3; // e 的值为 2
%=取模后赋值int f = 7; f %= 3; // f 的值为 1

3. 比较运算符

比较运算符用于比较两个值,返回布尔类型(true 或 false)。

运算符描述示例
==等于int a = 5; int b = 5; boolean c = (a == b); // c 的值为 true
!=不等于int d = 5; int e = 3; boolean f = (d != e); // f 的值为 true
>大于int g = 5; int h = 3; boolean i = (g > h); // i 的值为 true
<小于int j = 5; int k = 7; boolean l = (j < k); // l 的值为 true
>=大于等于int m = 5; int n = 5; boolean o = (m >= n); // o 的值为 true
<=小于等于int p = 5; int q = 7; boolean r = (p <= q); // r 的值为 true

4. 逻辑运算符

逻辑运算符用于组合布尔表达式。

运算符描述示例
&&逻辑与boolean a = true; boolean b = false; boolean c = (a && b); // c 的值为 false
||逻辑或boolean d = true; boolean e = false; boolean f = (d||e); //f 的值为 true`
!逻辑非boolean g = true; boolean h = !g; // h 的值为 false

5. 位运算符

位运算符用于对二进制位进行操作。

运算符描述示例
&按位与int a = 5; int b = 3; int c = a & b; // c 的值为 1
|按位或int d = 5; int e = 3; int f = d | e; // f 的值为 7
^按位异或int g = 5; int h = 3; int i = g ^ h; // i 的值为 6
~按位取反int j = 5; int k = ~j; // k 的值为 -6
<<左移int l = 5; int m = l << 1; // m 的值为 10
>>右移int n = 5; int o = n >> 1; // o 的值为 2
>>>无符号右移int p = -5; int q = p >>> 1; // q 的值为一个很大的正数

6. 三元运算符

三元运算符是一种简洁的条件判断语句。

条件表达式 ? 表达式1 : 表达式2;
int a = 5;
int b = 3;
int max = (a > b) ? a : b; // max 的值为 5

运算符优先级

运算符优先级决定了表达式中运算符的计算顺序。优先级高的运算符先计算,相同优先级的运算符按照从左到右的顺序计算。以下是 Java 运算符的优先级,从高到低排列:

  1. 后缀运算符:() [] .
  2. 一元运算符:++ -- + - ! ~
  3. 乘除模运算符:* / %
  4. 加减运算符:+ -
  5. 移位运算符:<< >> >>>
  6. 关系运算符:< <= > >= instanceof
  7. 相等运算符:== !=
  8. 按位与运算符:&
  9. 按位异或运算符:^
  10. 按位或运算符:|
  11. 逻辑与运算符:&&
  12. 逻辑或运算符:||
  13. 三元运算符:? :
  14. 赋值运算符:= += -= *= /= %= &= ^= |= <<= >>= >>>=

在编写表达式时,可以使用括号 () 来明确指定计算顺序,提高代码的可读性。例如:

int result = (2 + 3) * 4; // 先计算括号内的加法,再计算乘法

+ 运算符除了用于数值的加法运算外,还能用于字符串的连接操作

字符串连接基本规则

当 + 运算符的操作数中有一个是字符串类型时,Java 会将其他操作数转换为字符串,然后进行连接操作。具体规则如下:

1. 字符串与基本数据类型连接

当字符串与基本数据类型(如 intdoubleboolean 等)使用 + 运算符时,基本数据类型会自动转换为字符串,然后与另一个字符串进行连接。

public class StringConcatenation {public static void main(String[] args) {// 字符串与 int 类型连接int num = 10;String str1 = "The number is: " + num;System.out.println(str1);// 字符串与 double 类型连接double d = 3.14;String str2 = "The value of pi is approximately: " + d;System.out.println(str2);// 字符串与 boolean 类型连接boolean isTrue = true;String str3 = "The condition is: " + isTrue;System.out.println(str3);}
}

在上述代码中,numd 和 isTrue 分别是 intdouble 和 boolean 类型,当它们与字符串使用 + 运算符时,会自动转换为字符串进行连接。

多个字符串与其他类型混合连接

+ 运算符是从左到右依次进行计算的,当多个字符串和其他类型混合使用 + 运算符时,会按照顺序依次进行连接。

public class MultipleStringConcatenation {public static void main(String[] args) {int a = 5;int b = 3;String result = "The sum of " + a + " and " + b + " is: " + (a + b);System.out.println(result);}
}

在上述代码中,首先将 "The sum of " 与 a 转换后的字符串连接,然后依次连接后续的字符串和变量。需要注意的是,(a + b) 用括号括起来是为了先进行数值加法运算,再将结果转换为字符串进行连接。如果没有括号,a 会先与前面的字符串连接,而不是先进行加法运算。

字符串连接中的类型转换顺序

当表达式中包含多个 + 运算符时,会按照从左到右的顺序进行计算。一旦遇到字符串类型的操作数,后续的操作数都会被转换为字符串进行连接。

public class ConversionOrder {public static void main(String[] args) {int x = 1;int y = 2;String s = "Result: ";System.out.println(s + x + y);  // 先将 s 与 x 转换后的字符串连接,再与 y 转换后的字符串连接System.out.println(x + y + s);  // 先进行 x + y 的数值加法运算,再将结果与 s 连接}
}

在上述代码中,第一个 println 语句先将 s 与 x 转换后的字符串连接,再与 y 转换后的字符串连接,结果为 "Result: 12";第二个 println 语句先进行 x + y 的数值加法运算,得到 3,再将 3 转换为字符串与 s 连接,结果为 "3Result: "

综上所述,+ 运算符在 Java 中用于字符串连接时,会根据操作数的类型自动进行类型转换,按照从左到右的顺序依次进行连接操作。在编写代码时,需要注意运算符的优先级和类型转换顺序,以确保得到预期的结果。

自动类型转换

自动类型转换,也称为隐式类型转换,是指在某些情况下,Java 编译器会自动将一种数据类型转换为另一种数据类型,而无需程序员进行额外的操作。自动类型转换需要满足以下两个条件:

  1. 目标类型的范围大于源类型的范围:即目标类型能够容纳源类型的所有可能值。
  2. 数据类型兼容:两种数据类型必须是兼容的,例如数值类型之间可以进行自动类型转换。

以下是 常见的自动类型转换示例:

public class AutomaticTypeConversion {public static void main(String[] args) {// 1. 从 byte 到 shortbyte byteValue = 10;short shortValue = byteValue;System.out.println("byte 转换为 short: " + shortValue);// 2. 从 short 到 intshort anotherShortValue = 20;int intValue = anotherShortValue;System.out.println("short 转换为 int: " + intValue);// 3. 从 int 到 longint anotherIntValue = 30;long longValue = anotherIntValue;System.out.println("int 转换为 long: " + longValue);// 4. 从 int 到 floatint yetAnotherIntValue = 40;float floatValue = yetAnotherIntValue;System.out.println("int 转换为 float: " + floatValue);// 5. 从 long 到 doublelong anotherLongValue = 50L;double doubleValue = anotherLongValue;System.out.println("long 转换为 double: " + doubleValue);}
}

在上述代码中,分别展示了从 byte 到 shortshort 到 intint 到 longint 到 float 以及 long 到 double 的自动类型转换。由于目标类型的范围大于源类型的范围,编译器会自动进行转换。

强制类型转换

强制类型转换,也称为显式类型转换,是指当需要将一个范围大的数据类型转换为范围小的数据类型时,程序员需要手动进行类型转换。强制类型转换可能会导致数据丢失,因为目标类型可能无法容纳源类型的所有可能值。

目标类型 变量名 = (目标类型) 源类型变量;
public class ExplicitTypeConversion {public static void main(String[] args) {// 1. 从 double 到 intdouble doubleValue = 3.14;int intValue = (int) doubleValue;System.out.println("double 转换为 int: " + intValue);// 2. 从 int 到 byteint intValue2 = 130;byte byteValue = (byte) intValue2;System.out.println("int 转换为 byte: " + byteValue);// 3. 从 long 到 shortlong longValue = 32768L;short shortValue = (short) longValue;System.out.println("long 转换为 short: " + shortValue);}
}

在上述代码中,分别展示了从 double 到 intint 到 byte 以及 long 到 short 的强制类型转换。需要注意的是,强制类型转换可能会导致数据丢失,例如 double 类型的小数部分会被截断,int 或 long 类型的值可能会超出目标类型的范围而导致溢出。

综上所述,自动类型转换是编译器自动完成的,而强制类型转换需要程序员手动进行。在进行强制类型转换时,需要谨慎处理,避免数据丢失。

小于 int 类型的数据类型(如 byteshort 和 char)在进行运算时,通常都会自动转换为 int 类型。

原因

  • 保证运算精度byteshort 和 char 的取值范围相对较小,在运算过程中结果可能会超出它们的表示范围,转换为 int 类型可以避免溢出问题,确保运算结果的准确性。
  • 简化指令集:Java 虚拟机(JVM)的指令集是为处理 int 类型设计的。将小于 int 的数据类型转换为 int 类型,可以统一处理整数运算,简化 JVM 的指令集和运算规则,提高运算效率。

示例代码

public class SmallerThanIntConversion {public static void main(String[] args) {// byte 类型运算byte byte1 = 10;byte byte2 = 20;// byte1 和 byte2 会自动转换为 int 类型进行运算int byteResult = byte1 + byte2;System.out.println("byte 运算结果: " + byteResult);// short 类型运算short short1 = 30;short short2 = 40;// short1 和 short2 会自动转换为 int 类型进行运算int shortResult = short1 + short2;System.out.println("short 运算结果: " + shortResult);// char 类型运算char char1 = 'A';char char2 = 'B';// char1 和 char2 会自动转换为 int 类型进行运算int charResult = char1 + char2;System.out.println("char 运算结果: " + charResult);}
}

代码解释

  • byte 类型运算byte1 和 byte2 是 byte 类型,但在执行 byte1 + byte2 运算时,它们会自动转换为 int 类型,最终结果也是 int 类型。
  • short 类型运算short1 和 short2 是 short 类型,在运算时同样会自动转换为 int 类型,结果为 int 类型。
  • char 类型运算char 类型在 Java 中本质上是无符号的 16 位整数。char1 和 char2 在运算时会自动转换为 int 类型,结果也是 int 类型。

如果要将运算结果赋值给小于 int 类型的变量,需要进行强制类型转换,但要注意可能会出现数据溢出的问题。

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

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

相关文章

升级 Spring Boot CLI

&#x1f31f; 升级 Spring Boot CLI 1️⃣ &#x1f504; 通过包管理器升级 使用对应包管理器命令&#xff08;如 brew upgrade&#xff09; 2️⃣ &#x1f4e5; 手动安装升级 遵循 标准安装说明 注意更新 PATH 环境变量移除旧版本路径 &#x1f517; 链接原文&#xff1a…

如何轻松将RS232转为Profibus DP,提升PLC效率?

如何轻松将RS232转为Profibus DP&#xff0c;提升PLC效率&#xff1f; 今天&#xff0c;我们就来聊聊一个工业自动化中常见的应用场景&#xff1a;如何通过兴达易控RS232转Profibus DP网关&#xff0c;实现流量泵与PLC&#xff08;可编程逻辑控制器&#xff09;的通信。这个话…

QT 连接数据库操作(15)

文章目录 一、本章说明二、QT连接云端数据库实现2.1 ODBC软件安装及参数设置2.2 软件代码实现三、项目源码文件一、本章说明 注:本节为【基于STM的环境监测系统(节点+云服务器存储+QT界面设计)】项目第15篇文章,前面已经创建了监测软件的登录窗口,接下来我们将在主窗口实…

linux系统之----命令行参数和环境变量

一、命令行参数 1.main()函数的参数 在C语言中&#xff0c;main函数可以接收命令行参数&#xff0c;其标准形式为&#xff1a; int main(int argc, char *argv[]) {// 程序代码return 0; } 这里我们解释一下&#xff1a; argc&#xff1a;参数个数计数器&#xff08;Argum…

解析excel中的图片

解析excel中的图片 前言一、pom依赖二、使用步骤1.示例数据2.代码如下&#xff08;示例&#xff09;&#xff1a; 总结 前言 初始化数据是&#xff0c;需要将excel中的数据解析并插入数据库。 但是某几列存放的是图片&#xff0c;这时候怎么办呢。 主要解决的是&#xff1a;获…

Unity任务系统笔记

数据结构设计 任务基类包括的字段&#xff1a; string 任务内容&#xff1b; Transform 任务目的地&#xff1b; MyCharacter 任务开启后要更新对话的NPC&#xff1b; MyTalkData 任务开启后相关NPC要说的对话数据&#xff1b; 共同方法&#xff1a;开启任务、完成任务。…

STM32的开发环境介绍

目录 STM32软件环境 Keil软件在线安装 其他软件环境安装 STM32开发的几种方式 STM32寄存器版本和库函数版本 标准外设库的作用&#xff1a; STM32软件环境 STM32 的集成开发环境&#xff08;IDE&#xff09;&#xff1a;编辑编译软件 常见的环境&#xff1a; (1)KEIL&a…

【特殊场景应对9】视频简历的适用场景与风险分析

写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…

Linux系统性能调优技巧分享

在数字化时代,Linux 系统以其开源、稳定、高效的特性,成为服务器、云计算、物联网等领域的核心支撑。然而,随着业务规模的扩大和负载的增加,系统性能问题逐渐凸显。掌握 Linux 系统性能调优技巧,不仅能提升系统运行效率,还能降低运维成本。下面从多个方面介绍实用的性能调…

关于Code_流苏:商务合作、产品开发、计算机科普、自媒体运营,一起见证科技与艺术的交融!

Code_流苏 &#x1f33f; 名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; &#x1f31f; 欢迎来到Code_流苏的CSDN主页 —— 与我一起&…

系统架构设计(三):质量属性

常见分类 一般来说&#xff0c;质量属性可以分为以下几类&#xff1a; 类别常见质量属性性能相关响应时间、吞吐量、资源利用率、实时性、可扩展性可用性相关可用性、高可用性&#xff08;HA&#xff09;、可靠性、容错性、恢复性可维护性相关可维护性、可测试性、可扩展性、…

【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码)

目录 效果一览程序获取程序内容代码分享研究内容GRU门控循环单元在锂电池剩余寿命预测中的应用摘要关键词1. 引言1.1 研究背景1.2 研究现状与问题1.3 研究目的与意义2. 文献综述2.1 锂电池剩余寿命预测传统方法2.2 深度学习在锂电池寿命预测中的应用2.3 研究空白与本文切入点3.…

SpringCloud原理和机制

Spring Cloud 是一套基于Spring Boot的微服务开发工具集&#xff0c;它提供了在分布式系统环境下构建应用程序所需的一系列工具和服务。Spring Cloud旨在帮助开发人员快速构建一些常见的微服务模式&#xff0c;如服务发现、配置管理、智能路由、熔断器、微代理、控制总线等。 …

LeetCode -- Flora -- edit 2025-04-25

1.盛最多水的容器 11. 盛最多水的容器 已解答 中等 相关标签 相关企业 提示 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最…

有关图的类型的题目以及知识点(2)

1、具有5个顶点的有向完全图有20条弧。 2、若一个有向图用邻接矩阵表示&#xff0c;则第个结点的入度就是&#xff1a;第i列的非零元素的个数。 3、有向图的邻接矩阵可以是对称的&#xff0c;也可以是不对称的。 4、设N个顶点E条边的图用邻接表存储&#xff0c;则求每个顶点…

正则表达式的捕获组

是正则表达式中的一个重要概念&#xff0c;用于提取字符串中的特定部分 捕获组是通过正则表达式中的圆括号 () 定义的&#xff0c;它的作用是&#xff1a; 划分和标记&#xff1a;将正则表达式的一部分划分为逻辑单元。 提取数据&#xff1a;从字符串中提取符合组内模式的内容…

deepseek-cli开源的强大命令行界面,用于与 DeepSeek 的 AI 模型进行交互

一、软件介绍 文末提供程序和源码下载 deepseek-cli一个强大的命令行界面&#xff0c;用于与 DeepSeek 的 AI 模型进行交互。 二、Features 特征 Multiple Model Support 多模型支持 DeepSeek-V3 (deepseek-chat) DeepSeek-R1 &#xff08;deepseek-reasoner&#xff09;Dee…

Java—— 五道算法水题

第一题 需求&#xff1a; 包装类&#xff1a;键盘录入一些1~100之间的整数&#xff0c;并添加到集合中。直到集合中所有数据和超过200为止 代码实现&#xff1a; import java.util.ArrayList; import java.util.Scanner;public class Test1 {public static void main(String[]…

安全编排自动化与响应(SOAR):从事件响应到智能编排的技术实践

安全编排自动化与响应&#xff08;SOAR&#xff09;&#xff1a;从事件响应到智能编排的技术实践 在网络安全威胁复杂度指数级增长的今天&#xff0c;人工处理安全事件的效率已难以应对高频攻击&#xff08;如日均万级的恶意IP扫描&#xff09;。安全编排自动化与响应&#xf…

网络原理 - 9

目录 数据链路层 以太网 以太网帧格式 MAC 地址 DNS&#xff08;Domain Name System&#xff09; 完&#xff01; 数据链路层 这里的内容也是简单了解&#xff0c;除非是做交换机开发&#xff0c;一般程序员不需要涉及~~ 以太网 ”以太网“不是一种具体的网络&#xf…