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内容
  • 短路运算导致右边代码没执行
  • 复合赋值运算的隐式强制转换
  • 浮点数用==比较
相关推荐
PHP实战开发录9 分钟前
PHP文件上传成功为什么页面却找不到
开发语言·nginx·php·开发
云上小朱39 分钟前
开发测试环境-Kubernetes离线部署指南
后端
遨翔在知识的海洋里1 小时前
nestjs(1)-模块的相互调用
后端
Profile排查笔记1 小时前
指纹浏览器推荐:用一套验收清单筛选 Profile、代理与自动化能力
前端·人工智能·后端·自动化
jsl_jsl_jsl1 小时前
JUC速记
后端
站大爷IP1 小时前
Python的pip依赖把我折腾惨了,原来requirements.txt和poetry能打出火星撞地球
后端
torpidcat1 小时前
ruoyi-vue-pro 若依芋道 java springboot +mybatis 生日查询相关
java·vue.js·spring boot
狗哥哥1 小时前
用“十步学习法”带你学会事件驱动架构
后端
AC赳赳老秦1 小时前
文旅市场公开数据分析:基于 OpenClaw 采集景区客流与门票公示数据,生成区域文旅热度监测报告
java·c语言·python·php·symfony·deepseek·openclaw
云小逸1 小时前
C++ 第一阶段:对象、内存与生命周期
开发语言·c++