Java : 踩过这个坑没?

2019 年 6 月 12 日
 oska117
String a = "a";

String b = "b";

String c = a + "_" + b==null?"":b;

上面的代码我一直以为 c 会返回 "a_b"

实际上却返回的是 "b" (+运算符优先级高于三目)

为啥我一直觉得 这样写没问题呢?

关键是我同事也有这种错觉。

7352 次点击
所在节点    程序员
68 条回复
GPLer
2019 年 6 月 12 日
没记错的话三目运算符的优先级是最低的,使用时本来就要注意加括号,之所以你认为没问题是因为错误的缩进。
rainmakeroly
2019 年 6 月 12 日
不是错觉,是二。有括号不用。
hoyixi
2019 年 6 月 12 日
这样写代码的早点开除,生活能更美好点
wucao219101
2019 年 6 月 12 日
键盘上的括号是黄金按钮舍不得按吗?哈哈
zhaishunqi
2019 年 6 月 12 日
就是 b
africwildman
2019 年 6 月 12 日
容易绕进去的代码还是用括号括一下保险。
anyele
2019 年 6 月 12 日
并不是 Java 的坑,是你写出来坑自己,坑别人
CEBBCAT
2019 年 6 月 12 日
虽然我算对了数了,但还是被标题偏进来了的,楼主你赢了
luozic
2019 年 6 月 12 日
括号不用?
Takamine
2019 年 6 月 12 日
Java:这个锅我不背。

如果对运算优先级不熟,请多加括号。:doge:
iiii
2019 年 6 月 12 日
这能怪到 Java?
potatowish
2019 年 6 月 12 日
看到这么写代码的,我会过去打死他
Leammin
2019 年 6 月 12 日
idea 这样的有提示,我已经看到公司代码里好几处这样的写法了😵
Navee
2019 年 6 月 12 日
这不是语言的坑,你这个写法就有歧义
xrlin
2019 年 6 月 12 日
上一个这么写的已经被拖去打靶了
Ahaochan
2019 年 6 月 12 日
int i = 0;
System.out.println(i++ + ++i + ++i);
请(
itechify
2019 年 6 月 12 日
为啥不用括号。。。
vanhukset
2019 年 6 月 12 日
代码没有这么写的
Kilerd
2019 年 6 月 12 日
首先代码不会这么写,其次空格强行干扰优先级判断
Vegetable
2019 年 6 月 12 日
同一行,多个运算符时,除非各个运算符的优先级明显相同,也就是连续+-,连续* /,或者连续 and or 时,我才不用括号,否则为了可读性也要加上括号,这导致我其实对各个语言的运算符优先级都没什么认识,我需要优先级高的都用括号了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/573341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX