java new object.method() 为啥不报错? [关闭]

Posted

技术标签:

【中文标题】java new object.method() 为啥不报错? [关闭]【英文标题】:java new object.method() why not be a error? [closed]java new object.method() 为什么不报错? [关闭] 【发布时间】:2017-06-06 05:30:42 【问题描述】:

对不起,我的英语水平很低。 例如:

new StringBuilder().reverse().toString();

运算符.new之前,所以没有对象可以执行method(),为什么可以执行呢?它没有告诉我这是一个错误。

【问题讨论】:

你的问题不清楚,意义不大 嗯,很明显,. 运算符 notnew 之前。事实上,它们都是Primary,所以它们具有相同的优先级,所以它们从左到右求值。 @Rahul - 对我来说,初学者的这个问题显然是有道理的。我仍然记得我开始编程(使用 java)时的愚蠢问题。 @Rahul 这个问题非常清楚。它只是建立在一个错误之上。 "我假设这证明是不正确的。为什么证明不正确?"答:你的假设是错误的,不是证据 【参考方案1】:

. 运算符不会在 new StringBuilder() 之前进行评估 - 它都是从左到右评估的。所以new StringBuilder() 创建一个StringBuilder 实例,.reverse() 反转(空)StringBuilder,然后.toString() 构造一个(空)String

【讨论】:

【参考方案2】:

运算符'.'早于new

不,不是。运算符. 不在new 之前:它们都是Primary,所以它们具有相同的优先级,所以它们从左到右求值。

为什么可以正确执行?

真正的问题是为什么它可以被编译,我已经回答过了。

它没有告诉我这是一个错误。

这不是错误。

【讨论】:

以上是关于java new object.method() 为啥不报错? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

包装函数

用函数调用更新对象

ajax&模板引擎

java中为啥说静态方法先执行?

Javascript嵌套函数失去作用域

断言差异