当前位置:网站首页>【无标题】
【无标题】
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 的值是多少?
边栏推荐
猜你喜欢
随机推荐
电流探头如何设置示波器参数
2022年电工(初级)国家题库及模拟考试
cmake
网络层与数据链路层
3、ROS工作空间的创建
redis基本数据类型
maya视图如何切换
2022年A特种设备相关管理(电梯)考试模拟100题及答案
qwt库的编译和使用
webrtc学习--websocket服务器
goland里的异常处理
BGP实验+选路+路由策略+OSPF
打开VsCode经常弹出:尝试在目标目录创建文件时发生一个错误:拒绝访问:重试 跳过这个文件(不推荐),关闭安装程序
c语言进阶篇:动态内存管理(相关函数、常见错误、笔试题)
TCP协议之《ACK状态4种详解》
maya图片如何导入
整理零碎东西
125. 耍杂技的牛
Jackson的ObjectMapper在项目中的主要运用
最新开源的面试笔记,天花板级别!