Java中未解释的括号

Java中未解释的括号,java,Java,除了类型转换之外,括号在Java中做什么 我见过他们在许多令人困惑的情况下使用: 我只知道括号、调用和分组表达式的两种用法。我在网上搜索过,但找不到更多的信息 在上面的例子中,我知道Float.valueOF(arg)返回一个对象。用括号括起对象有什么作用?我认为它们在这里没有任何作用。可能是经过一些重构后剩下的绝对没有。在这种情况下,它们不是必需的,可以移除。它们很可能在那里更清楚地表明floatValue()在Float.valueOf()之后调用 这是一个用于分组表达式的括号。在这里,它将

除了类型转换之外,括号在Java中做什么

我见过他们在许多令人困惑的情况下使用:

我只知道括号、调用和分组表达式的两种用法。我在网上搜索过,但找不到更多的信息


在上面的例子中,我知道
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();

直接。此处它们用于分组。如果表达式的类型为Float,那么其中一个表达式的内部是什么,因此可以将方法
floatValue()
应用于括号的整个内容

它们可以在这里删除,因为没有歧义。对于使用另一个更高存在顺序的运算符的表达式,它们是强制性的。但是,没有这样的操作员,点/投影仪具有最高优先级。所以它们在这里真的没用

问候,,
Stéphane

我怀疑程序员只是觉得它更具可读性。在这个特殊的情况下,我不同意他的观点,但我经常用括号来表达清楚。例如,我发现

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])
中的额外空间看起来也很奇怪,因为它在开头部分是无与伦比的。

仅仅因为Oracle收购了Sun并不意味着他们了解Java;)实际上,最好编写
float a=float.parseFloat(args[0])此处,避免创建不必要的Float对象,然后将其丢弃。但也许这就是这个例子的重点。@Paŭlo Ebermann或者至少他们可以依靠自动拆箱,而不调用
floatValue()
。@Paŭlo:parseFloat和原语包装中的其他parseXyz方法不是在Java 1.2中引入的。我打赌我仍然有一些使用Float.valueOf(“47.11”).floatValue()方式的旧代码。我发现如果使用Smalltalk这样的语言,这实际上是不同的(第一个给出11,第二个给出20)。parseFloat也更快,因为它不创建对象。
//Your example:
        float a = (Float.valueOf(args[0]) ).floatValue();  

// equivalent:
        float a = Float.valueOf(args[0]).floatValue();