当前位置:网站首页>【无标题】
【无标题】
2022-08-10 04:03:00 【l'amourХэ рутилин】
最近遇到这样一个题,下面这段代码的运行结果是什么?
public static void main(String[] args) {
String s1 = "runoob";
String s2 = "runoob";
System.out.println("s1 == s2 is:" + s1 == s2);
}
我不假思索的写下了s1==s2 is true 。
可运行的结果却是false。
在一番思考之后我发现是算数符优先级的问题,+的优先级大于==,因此上面代码比较的是"s1 == s2 is:+ s1" == s2,所有输出结果为false。
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。

来看一个复杂的表达式
--y || ++x && ++z;根据上表的优先级,可以看出执行顺序为
1. 先计算 y 的自减运算符,即 --y。
2. 再计算 x 的自增运算符,即 ++x。
3. 接着计算 z 的自增运算符,即 ++z。
4. 由于逻辑与比逻辑或的优先级高,这里将 2 和 3 的结果进行逻辑与运算,即 ++x && ++z。
5. 最后将 4 的结果与 1 进行逻辑或运算,即 --y||++x&&++z。
上面的表达式仅在这里作为题目,在实际开发可不要这么写。
--y||(++x&&++z);最后:
不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。
不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序。
附:
int a = 5;
int b = 4;
int c = a++- --b*++a/b-- >>2%a--;c 的值是多少?
边栏推荐
猜你喜欢
随机推荐
最新开源的面试笔记,天花板级别!
整理零碎东西
ZZULIOJ:1022: 三整数排序
qwt库的编译和使用
GP如何进行数据比对?
ThreedLocal在单线程中的应用【获取在拦截器中登录的用户信息】
ZZULIOJ:1021: 三个整数的最大值
请问mindspore支持l1范数归一化吗
数据库设计中反映用户对数据要求的模式叫什么
链表的定义和使用
ZZULIOJ:1017: 判断正整数位数
C语言原码,反码,补码与大小端
TCP协议之《Pacing功能》
【网络迁移】Pytorch中的F.interpolate对应MindSpore哪个方法
[STL]map与set
如何成为一名合格的 DBA?看看“老油条”们怎么说
音乐现场的未来将被NFT门票主宰?
虚假新闻检测论文阅读(七):A temporal ensembling based semi-supervised ConvNet for the detection of fake news
兴盛优选监控场景的时序数据库选型与落地实践
若依系统前后台漏洞大全






![[STL]map与set](/img/4a/29ecb90ce7c10adb25fd05b92a5900.png)


