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" (+运算符优先级高于三目)

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

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

6233 次点击
所在节点    程序员
68 条回复
cheng6563
2019-06-13 00:31:21 +08:00
还真没遇到
int b=2;
int a=b=3;
结果不是很清晰的?
silentstorm
2019-06-13 06:27:00 +08:00
神经病才这么写代码,纯属跟自己过不去。
kevinWHX
2019-06-13 07:08:52 +08:00
按照大类,算数运算符 比较运算符 逻辑运算符 优先级依次降低
gramyang
2019-06-13 07:25:12 +08:00
一般来说,烦了这个错误,悄悄的不做声,或者说自己看错了,然后下次改正就行了。。。。

理直气壮的说出来小心被优化啊
wozhizui
2019-06-13 07:47:15 +08:00
有记和查运算优先级的时间,还不如加个括号,这哪是什么坑。
另外,我读的时候就是 b 啊。
Java 应该是最稳的老狗语言了。
AlphaStone
2019-06-13 08:02:33 +08:00
没踩到,看一眼就知道是 b
sonyxperia
2019-06-13 08:23:00 +08:00
我从来都是用括号的,记什么优先级
cway
2019-06-13 09:07:37 +08:00
肯定是 b 啊,搁谁第一眼都差不多是,没括号 a + "_" + b 就是一个整体
passerbytiny
2019-06-13 09:10:28 +08:00
格式化后的代码:
String a = "a";

String b = "b";

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

有时间破坏格式化,没时间加括号。
HENQIGUAI
2019-06-13 09:12:34 +08:00
没加括号,空格也不好好用,规范都读哪儿去了?
palmers
2019-06-13 09:12:42 +08:00
Sornets
2019-06-13 09:15:53 +08:00
面试最烦碰见这种 xx 题
simonv3ex
2019-06-13 09:16:31 +08:00
a + "_" + b 就不等于 null 啊,所以结果是 b
lyy16384
2019-06-13 09:17:21 +08:00
@Vegetable #20 关系运算符之间也有优先级的吧
pkookp8
2019-06-13 09:19:49 +08:00
错觉来自于空格,请加上空格再看一遍
还有错觉搜索一下运算符优先级对着再看一遍
如果懒得看随便找一种语言跑一下这段代码,结果都一样
calming
2019-06-13 09:21:33 +08:00
写这种代码自己心里过得去?
460881773
2019-06-13 09:22:55 +08:00
对不起 一下子就算出是 b
yaoper
2019-06-13 09:23:18 +08:00
自己造作的坑。
itmyhome126
2019-06-13 09:28:30 +08:00
这不是基础问题吗。。
zifangsky
2019-06-13 10:00:37 +08:00
如果对运算优先级不熟,请多加括号!

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

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

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

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

© 2021 V2EX