正文
是的,这是真的。即使你的大脑解析器不能立刻理解上面方法的返回类型,但其实他们都是一样的!类似的还有下面这些代码片段:
你认为这很疯狂?想象在上面使用
JSR-308 / Java 8 类型注解
。语法的可能性指数激增!
类型注解。看起来很神秘,其实并不难理解。
或者换句话说:
当我做最近一次提交的时候是在我4周的假期之前。
对你来说,上面的内容在你的实际使用中找到了吧。
是否等价于:
然而,事实并非如此。我们来测试一下就知道了。
输出结果:
由此可见,三目条件运算符会在有需要的情况下,对操作数进行类型提升。注意,是只在有需要时才进行;否则,代码可能会抛出 NullPointerException 空引用异常:
很奇怪吗?来看看下面这两行代码:
直观看来它们等价,是吗?但可其实它们并不等价!JLS 解释如下:
E1 op= E2 形式的复合赋值表达式等价于 E1 = (T)((E1) op (E2)),这里 T 是 E1 的类型,E1 只计算一次。
非常好,我想引用
Peter Lawrey
Stack Overflow 上的对这个问题的回答
:
使用 *= 或 /= 来进行计算的例子
或者
或者
或者
现在看到它的作用了吗?我会在应用程序中对字符串进行乘法计算。因为,你懂的...
现在有一个更难的谜题。不要去看答案,看看你能不能自己找到答案。如果运行下面的程序:
… “有时候”,我会得到下面的输出: