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