繁体   English   中英

Java中不明原因的括号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM