[英]Unexplained parenthesise in Java
除了类型转换之外,Java中括号的作用是什么。
我已经看到它们在许多令人困惑的情况下使用, 这里是Java教程中的一个 :
//convert strings to numbers
float a = (Float.valueOf(args[0]) ).floatValue();
float b = (Float.valueOf(args[1]) ).floatValue();
我只知道括号,调用和分组表达式的两种用法。 我在网上搜索过但我找不到更多信息。
在上面的例子中,我知道Float.valueOF(arg)
返回一个对象。 括号化对象有什么影响?
绝对没有。 在这种情况下,它们不是必需的,可以删除。 他们最有可能更清楚地表明floatValue()
是在Float.valueOf()
之后调用的。
所以这是用于对表达式进行分组的括号的情况。 在这里,它将一个表达式分组(显然没有任何作用)。
它可以缩短为:
float a = Float.valueOf(args[0]).floatValue();
float b = Float.valueOf(args[1]).floatValue();
然后可以在逻辑上缩短为
float a = Float.parseFloat(args[0]);
float b = Float.parseFloat(args[1]);
我不相信他们在这里有任何目的。 在重构之后可能会遗留下来
除了迷惑你之外别无其他。 这跟说的一样好
float a = Float.valueOf(args[0]).floatValue();
直。
我怀疑程序员发现它更具可读性。 在这种特殊情况下,我不同意他,但经常使用括号使其更清晰。 例如,我发现
int i = 3 + (2 * 4);
比...更清楚
int i = 3 + 2 * 4;
代码示例中的额外括号不会添加任何内容。
//Your example:
float a = (Float.valueOf(args[0]) ).floatValue();
// equivalent:
float a = Float.valueOf(args[0]).floatValue();
可能是原始程序员在括号内做了更精细的事情,因此将它们用于分组,并在简化代码时忽略了删除它们。 但是试图将意图读入旧源是徒劳的。
args[0]) )
的额外空间看起来也很奇怪,因为它在开放式paren中是无与伦比的。
在这里,它们用于分组。 如果是Float类型,那么其中一个表达式中的内容是什么,因此您可以将方法floatValue()
应用于括号的整个内容。
它们可以在这里删除,因为没有歧义。 对于使用具有更高预售顺序的另一个运算符的表达式,它们将是强制性的。 但根据文档 ,没有这样的运算符,点/投影仪具有最高优先级。 所以他们在这里真的没用。
此致,Stéphane
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.