news 2026/9/7 8:25:31

java基础之运算符

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java基础之运算符

一.运算符的定义

在Java中,运算符是用于操作变量和值的符号,借助运算符能够对数据进行各类运算和操作。

二.运算符

1.算数运算符

算术运算符用于执行基本的数学运算,以下是常见的算术运算符及其示例:

(1)加法运算符 +

  • 整数相加

在对整数类型(byteshortintlong)使用+运算符时,会进行常规的加法运算。如果操作数中有long类型,结果就是long类型;若没有long类型,结果则为int类型。(此处涉及到的知识为类型提升,自动转换的一种,当范围大的和范围小的进行算数操作时,Java会自动将范围小的数的类型转换为范围比较大的数的类型)

int a = 10; long b = 20l; //代码报错,因为进行了类型提升 //int c = a + b; //代码正确 long d = a + b;
  • 浮点数相加

当操作数为floatdouble类型时,+运算符会进行浮点数加法运算。若操作数中有double类型,结果就是double类型;若只有float类型,结果为float类型(原理和上面一样)

  • 用于字符串的拼接
// 字符串拼接 String str1 = "Hello"; String str2 = " World"; String result = str1 + str2; // result 的值为 "Hello World"

在进行字符串的拼接时需要注意,当加法运算符用于字符串拼接时,如果表达式中既有字符串又有其他数据类型,会从左到右依次计算。若先遇到字符串,后续操作数会被自动转换为字符串进行拼接 (下面a和b的计算中,先出现了一个字符串,则按照字符串进行拼接,所以结果为12)

int num = 5; String result = "The number is: " + num; // 正确拼接 int a = 1, b = 2; String str = "" + a + b; // 结果是 "12",而不是 "3"

(2)减法运算符 -

减法运算符用于从一个数值中减去另一个数值。(存在和加法运算符同样的类型提升问题)

int num3 = 8; int num4 = 3; int num5 = num3 - num4; // num5 的值为 5

(3)乘法运算符 *

乘法运算符用于两个数相乘

int num5 = 4; int num6 = 5; int product = num5 * num6; // product 的值为 20

(4)除法运算符 /

除法运算符用于两个数的相除

int num7 = 10; int num8 = 3; int quotient = num7 / num8; // quotient 的值为 3
  • 注意事项

当两个操作数都是整数时,结果会自动抛弃小数部分,当两个操作数都是浮点数或者其中一个时浮点数时,结果不会抛弃小数部分

int num7 = 10; int num8 = 3; double num10 = 3; double num11 = 10; double num9 = num7 / num8; double num12 = num7 / num10; double num13 = num11 / num8;

(5)取模运算符 %

取模运算符用于计算两个数相除的余数

int num11 = 10; int num12 = 3; int remainder = num11 % num12; // remainder 的值为 1
  • 注意事项

取模运算结果的符号与被除数的符号一致。也就是说,不管除数的符号怎样,结果的符号取决于被除数

int a = 10; int b = 3; int Result = a % b; // 结果为 1,因为 10 除以 3 商 3 余 1 System.out.println(Result); int c = -10; int Result1 = c % b; // 结果为 -1,结果符号与被除数 -10 一致 System.out.println(Result1); int d = 10; int e = -3; int Result2 = d % e; // 结果为 1,结果符号与被除数 10 一致 System.out.println(Result2);
  • 常用场景

借助取模运算符对 2 取模的结果,能够判断一个整数是奇数还是偶数。若一个数对 2 取模的结果为 0,那么它就是偶数;若结果为 1,则为奇数

(6)自增运算符和自减运算符++ ,--

这两种运算符的作用分别是将变量的值加一和减一

int num13 = 5; int result1 = ++num13; // 前缀自增,num13 先变为 6,再赋值给 result1,result1 的值为 6 int num14 = 5; int result2 = num14++; // 后缀自增,先将 num14 的值 5 赋值给 result2,num14 再变为 6,result2 的值为 5 int num15 = 5; int result3 = --num15; // 前缀自减,num15 先变为 4,再赋值给 result3,result3 的值为 4 int num16 = 5; int result4 = num16--; // 后缀自减,先将 num16 的值 5 赋值给 result4,num16 再变为 4,result4 的值为 5
  • 注意事项

注意前缀自增(自减)和后缀自增(自减)的区别,前者是先自增,再赋值,后者则是先赋值,后自增,上述例子已经详细说明

2.赋值运算符

(1)简单的赋值运算符 =

在以前的学习中,=通常被认为的计算两数结果的符号,但在Java中,他的作用是将一个值赋给一个变量

int a = 10;
  • 基本数据类型赋值

只需要注意等号左边和右边的数据类型兼容即可,不兼容时可使用强制类型转换

  • 引用数据类型赋值

赋值时,右侧对象的类型要和左侧变量的类型相同或者是其子类型

class Animal {} class Dog extends Animal {} // 正确,Dog 是 Animal 的子类 Animal animal = new Dog(); // 错误,类型不兼容,若要赋值需进行强制类型转换 // Dog dog = new Animal();

当将一个引用类型赋值给另一个引用类型,是将一个引用指向另一个引用指向的对象,此时这两个引用会指向同一个对象

class Person { String name; Person(String name) { this.name = name; } public static void main(String[] args) { Person p1 = new Person("Alice"); // p2 和 p1 指向同一个 Person 对象 Person p2 = p1; p2.name = "Bob"; // 输出 "Bob",因为 p1 和 p2 指向同一个对象 System.out.println(p1.name); } }
  • 引用类型空值赋值

当想要一个引用不指向任何一个对象时,可以将赋值为null,此时不指向任何一个对象

(2)复合赋值运算符 +=, -=, *=, /=, %=

  • 加后赋值
int num18 = 5; num18 += 3; // 等价于 num18 = num18 + 3,num18 的值为 8
  • 减后赋值
int num19 = 5; num19 -= 3; // 等价于 num19 = num19 - 3,num19 的值为 2
  • 乘后赋值
int num20 = 5; num20 *= 3; // 等价于 num20 = num20 * 3,num20 的值为 15
  • 除后赋值
int num21 = 6; num21 /= 3; // 等价于 num21 = num21 / 3,num21 的值为 2
  • 取模后赋值
int num22 = 7; num22 %= 3; // 等价于 num22 = num22 % 3,num22 的值为 1

3.比较运算符

(1)等于运算符 ==

用于判断两个值是否相等

int num23 = 5; int num24 = 5; boolean isEqual = (num23 == num24); // isEqual 的值为 true
  • 注意事项

当比较的时两个引用时 ==此时比较的时两个引用是否指向同一个对象,也就是地址是不是一样的,而不是对象的内容是否相同,此时需要使用使用Java中的方法equals()

String str1 = new String("hello"); String str2 = new String("hello"); boolean isSame = str1 == str2;//比较的是引用 boolean isEqual = str1.equals(str2);//比较的是内容

(2)不等于运算符 !=

用于判断两个数的值是否不相等

int num25 = 5; int num26 = 3; boolean isNotEqual = (num25 != num26); // isNotEqual 的值为 true

(3)大于,大于等于运算符 >, >=

int num27 = 5; int num28 = 3; boolean isGreater = (num27 > num28); // isGreater 的值为 true int num31 = 5; int num32 = 5; boolean isGreaterOrEqual = (num31 >= num32); // isGreaterOrEqual 的值为 true

(4)小于,小于等于运算符 <, <=

和大于等于同理

  • 对字符进行比较时

可以对字符类型进行比较,因为字符在计算机中是以 ASCII 码值的形式存储的,比较时实际是比较它们的 ASCII 码值

4.逻辑运算符

(1)逻辑与 &&

逻辑与,即当两边都为真时才为真,也就是当两个条件都满足时才是true,如果第一个表达式为false,那么就不会执行第二个表达式了

boolean condition1 = true; boolean condition2 = false; boolean result5 = condition1 && condition2; // result5 的值为 false
  • 注意事项

&&与||都具有短路特性,&&如果左边的表达式为false,那么就不会再执行右边的表达式

int a = 5; boolean result = (a > 10) && (++a > 20); // a > 10 为 false,++a 不会执行

(2)逻辑或 ||

只要两个布尔表达式中有一个为true,结果就为true。如果第一个表达式为true,则不会计算第二个表达式

boolean condition3 = true; boolean condition4 = false; boolean result6 = condition3 || condition4; // result6 的值为 true

也可以用于短路逻辑,只要第一个为true,那么就不会执行第二个,可以用来防止空指针时使用

(3)逻辑非 !

用于对布尔值取反

boolean condition5 = true; boolean result7 = !condition5; // result7 的值为 false

5.位运算符

在 Java 里,位运算符用于直接操作整数类型(像byteshortintlong)的二进制位 ,主要时用于操作二进制位

(1)按位与 &

按位与运算符会对两个操作数的对应二进制位进行与运算。仅当两个对应位都为 1 时,结果位才为 1;否则结果位为 0

int a = 5; // 二进制 0101 int b = 3; // 二进制 0011 int result = a & b; // 二进制 0001,结果为 1 System.out.println(result);

(2)按位或 |

按位或运算符会对两个操作数的对应二进制位进行或运算。只要两个对应位中有一个为 1,结果位就为 1;只有当两个对应位都为 0 时,结果位才为 0

int c = 5; // 二进制 0101 int d = 3; // 二进制 0011 int result1 = c | d; // 二进制 0111,结果为 7 System.out.println(result1);

(3)按位异或 ^

按位异或运算符会对两个操作数的对应二进制位进行异或运算。当两个对应位不同时,结果位为 1;当两个对应位相同时,结果位为 0

int e = 5; // 二进制 0101 int f = 3; // 二进制 0011 int result2 = e ^ f; // 二进制 0110,结果为 6 System.out.println(result2);

(4)按位取反 ~

按位取反运算符是单目运算符,它会对操作数的每个二进制位取反,即 0 变为 1,1 变为 0

int g = 5; // 二进制 0101 int result3 = ~g; // 二进制 1010,结果为 -6 System.out.println(result3);

(5)左移运算符 <<

左移运算符会把操作数的二进制位向左移动指定的位数,右边空出的位用 0 填充

int h = 5; // 二进制 0101 int result4 = h << 2; // 二进制 010100,结果为 20 System.out.println(result4);

(6)右移运算符 >>

右移运算符会把操作数的二进制位向右移动指定的位数,左边空出的位用符号位填充(正数用 0 填充,负数用 1 填充)

int j = -5; // 二进制补码表示 int result6 = j >> 1; // 负数右移,左边补 1 System.out.println(result6);

(7)无符号右移运算符

无符号右移运算符会把操作数的二进制位向右移动指定的位数,左边空出的位用 0 填充,无论操作数是正数还是负数

int k = -5; // 二进制补码表示 int result7 = k >>> 1; // 无符号右移,左边补 0 System.out.println(result7);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 8:22:40

亡命迪斯科 MDO 自定义歌曲导入与打包全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 8:21:47

transformer用于图像分类

计算机视觉与transformer&#xff08;Vision transformer&#xff09;1、VIT:&#xff08;1&#xff09;原理&#xff1a;将图像分割成小块&#xff0c;通过线性变换得到patch embedding&#xff0c;加上位置编码&#xff0c;输入到encoder中&#xff0c;最后用分类头进行分类。…

作者头像 李华
网站建设 2026/9/7 8:21:43

IOPaint:AI图片修复的免费完整指南

IOPaint&#xff1a;AI图片修复的免费完整指南 【免费下载链接】IOPaint Image inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your pictures. …

作者头像 李华
网站建设 2026/9/7 8:19:29

双闭环直流调速系统从原理到SIMULINK仿真完整设计指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 8:17:40

T+转U8+工具全解析:历史数据迁移的实操指南与避坑经验

简介&#xff1a;面向用友T与U8数据迁移场景&#xff0c;提供从T账套转换至U8所需的核心程序与配套脚本。包内共13个文件&#xff0c;含8个SQL脚本、2个配置文件、2个OCX控件及1个主程序exe&#xff0c;压缩包仅426KB&#xff0c;轻量易部署。SQL脚本覆盖总账、应收、应付、存货…

作者头像 李华