4.Java运算符与表达式

运算符与表达式

运算符就是操作数据的工具,加减乘除、比较大小、逻辑判断、条件选择,都靠运算符来完成。用元素安抚把变量和值连起来的十字叫做表达式,表达式经过运算都会得到一个结果。

一、算符运算符:数值计算

1.1 算数运算符

运算符 含义 说明
+ 加法/拼接 遇字符串变拼接
- 减法/取负 单目时取负数
* 乘法 注意整数溢出
/ 除法 整数相除取整
% 取模(求余) 符号同被除数
++ 自增
- - 自减

1.2 整数除法自动取整

两个整数相除结果仍然是整数,小数部分丢弃;若其中有一个是浮点数,那么结果就是浮点数。

java 复制代码
Syetem.out.println(10/4)    //结果:2
System.out,println(10.0/4)  //结果2.5

1.3取模运算

取模运算的结果与被除数一致。

java 复制代码
Syetem.out.println(10/3)    //结果:1
Syetem.out.println(-10/3)    //结果:-1

1.4 +的双重身份

+遇到字符串时变成字符串拼接符,从左到右依次执行

java 复制代码
int a=10;
int b=20;
Syetem.out.println(a+b) //30纯加法
Syetem.out.println("结果是"+a+b)    //结果是1020 

1.5 字符的+运算

char类型参与算术运算时,会使用它在Unciode表中对应的整数值

java 复制代码
Syetem.out.println("A"+1)    //66

二、赋值运算符

=等于号:基本赋值运算符,作用是把右边的值交给左边的变量

运算符 等价于
= a=b
+= a=a+b
-= a=a-b
*= a=a*b
/= a=a/b
%= a=a%b

复合赋值运算符运算时会进行强制类型转换。

java 复制代码
byte b=10;
b=b+1;       //会报错,b+1自动提升为int不能赋值给byte
b+=1;        //正确的,等价于b=(byte)(b+1)

三、自增自减

++让变量+1,--让变量-1.

3.1 单独使用:前后无差别

让自增或自减独占一行放在前面和后面没有差别

3.2 混合使用

当自增自减混合使用时,放在前面先加后用,放在后面先用后加

java 复制代码
//前置++a;先自增,再用新值参与运算
int a=5;
int b=++a;   //a先变成6,y再拿6
//后置a++:先用原值参与计算,再自增
int c=a++;   //a先拿5,c再变成6

四、关系运算符:比较大小

关系运算符是用来比较两个值的大小是否相等,结果一定是true或false。通常配合if判断使用。

运算符 含义
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

==与=

==是判断相等有两个等号,=是赋值一个等号。若是写错会报错

String的比较方法

对引用类型String,==比较的是内存地址是否相同,不是内容是否相等。字符串内容比较使用.equals()方法

java 复制代码
String s1=new String("abc");
String s2=new String("abc");
System.out.println(s1==s2);             //false地址不同
System.out.println(s1.equals(s2));      //true内容相同

五、逻辑运算符:多条件组合

逻辑运算符用来组合多个布尔条件,结果仍是布尔值

运算符 名称 规则 短路
&& 短路与 两边都true才true 左边false右边不执行
|| 短路或 一边true就true 左边true则右边不执行
! 逻辑非 取反 -
& 逻辑与 同&& 两边都执行
| 逻辑或 同|| 两边都执行
^ 逻辑异或 左右不同才true -

5.1 &&、||vs&、|

&&与||具有短路特性------左边已经能确定结果时,右边不在执行,更高效,也更安全;&与|使用时两边都要执行,运行效率比&&和||低,日常开发首先短路与与短路或。

java 复制代码
int x=5;
boolean r3=(x>0)||(x++<10);  //左true,x++不执行,x=5
boolean r4=(x>0)|(x++<10);   //两边都执行,x=6

5.2 逻辑非!

!用来翻转布尔值

java 复制代码
boolean a=true;
System.out.println(!a);  //false

六、三元运算符?::简化的if-else

格式:条件表达式?值1:值2

规则:条件为true取值1,条件为false取值2

java 复制代码
//求两个数最大值
int a=10,b=20;
int max=(a>b)?a:b  //max=20

七、位运算符(了解即可)

位运算符直接操作二进制位,日常开发用的不多,但是在高性能计算、加密、位图、网络协议等场景会遇到

运算符 含义
& 按位与
| 按位或
^ 按位异或
~ 按位取反
<< 左移
>> 右移
>>> 无符号右移

八、表达式类型自动提升

当表达式里出现多种数据类型混合运算时,java会自动做类型提升。

  • 规则1:byte/short/char统一提升为int

    • 只要有byte、short、char参与运算,全部先变成int再算,结果也是int:
    java 复制代码
      	byte b1=10,b2=20;
      	int b3=b1+b2;						//int直接接收
      	byte b4=(byte)(b1+b2);			//需要强制转换
  • 规则2:整体提升到表达式中最高等级类型

    • 类型大小等级:byte-short-int-long-float-double
    java 复制代码
      int a=10;
      double b=3.14;
      double c=a+b;     //a自动提升为double,结果是double
  • 建议:开发中整数直接用int不够long;小数直接用double。byre/short/char只在特殊场景(如网络协议,文件IO等)使用,可以大幅度减少类型转换问题。

九、运算符优先级

优先级 运算符 说明
1(最高) ()、\[\] 小括号、下标
2 ++、--、!、~ 单目运算符(前置)
3 *、/、% 乘除取模
4 +、- 加减
5 <<、>>、>>> 移位
6 <、<=、>、>=、instanceof 关系比较
9 ^ 按位异或
10 | 按位或11&&逻辑与
12 || 逻辑或
13 ? : 三元
14(最低) =、+=、-=、*=、/=、%= 赋值

十、坑

  • 整数相除丢小数
  • +号字符串拼接顺序
  • 自增自减前后设置混淆
  • 把==写成=
  • 用==比较String内容
  • 短路运算导致右边代码没执行
  • 复合赋值运算的隐式强制转换
  • 浮点数用==比较
相关推荐
JacksonMx1 小时前
ContentCachingRequestWrapper 实战:解决请求体“只能读一次”的官方方案
java·spring boot·spring
马丁玩编程1 小时前
GitHub 3.5k Star 之后,Ragent AI 框架新版本来了
后端·面试·github
微石科技1 小时前
医疗设备维保如何从被动维修转向预防管理?宁波微石科技让运行数据提前发信号
java·后端·struts
AINative软件工程1 小时前
LLM 应用的 Warm-Up 工程实践:冷启动延迟从 12 秒砍到 800ms 的 5 个工程手段
后端·llm·ai编程
SomeB1oody1 小时前
【RustyML入门】5.1. 回归指标
开发语言·后端·机器学习·rust·教程
学计算机的计算基1 小时前
TCP 传输层硬核整理:三次握手、四次挥手、拥塞控制一次讲透
java·网络·笔记·网络协议·算法
卷无止境2 小时前
手写 SQL 在 Tortoise ORM 里到底能派上什么用场
后端·python·fastapi
再吃一根胡萝卜2 小时前
从 Docker 到 Kubernetes:微服务的“操作系统”长什么样?
后端
龙虾PRO2 小时前
2026 DeepSeek Harness 部署完整教程:npx 一键启动至 Python SDK 全流程接入
开发语言·python