当前位置:网站首页>【无标题】
【无标题】
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:1029: 三角形判定
Flutter 如何安装 pub.dev 上的 package
【OpenCV图像处理4】算术与位运算
TCP协议之《延迟ACCEPT》
requests库
MindSpore官方RandomChoiceWithMask算子用例报错
释放高通量算力价值潜能 JASMINER持续领跑 Web3 市场
[crit] 23856#0: *101796511 stat()
最新开源的面试笔记,天花板级别!
webrtc学习--websocket服务器
TCP协议之《数据与控制流程交叉时的延迟处理》
若依系统前后台漏洞大全
qwt库的编译和使用
GP如何进行数据比对?
2022年R2移动式压力容器充装考试题库模拟考试平台操作
TCP协议之《Out-Of-Window报文限速》
TCP协议之《QUICKACK模式》
GBase 8s迁移失败
【mindspore产品】【8卡分布式训练】davinci_model : load task fail, return ret
如何将 @Transactional 事务注解运用到炉火纯青?









