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内容
  • 短路运算导致右边代码没执行
  • 复合赋值运算的隐式强制转换
  • 浮点数用==比较
相关推荐
GIS数据转换器7 分钟前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
猿究院_夏燊5 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog5 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿6 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河6 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年6 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Jlzn88886 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
Williamtym6 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
香吧香6 小时前
GRPC连接机制---长连接分析
java·网络与传输协议
DongQiShanRen6 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习