Java : 踩过这个坑没?

2019-06-12 20:41:30 +08:00
 oska117
String a = "a";

String b = "b";

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX