什么';这是什么Java习语?带串联的字符串构造函数
在我正在使用的代码库中,我看到了这个习语的使用。有人能给我解释一下吗什么';这是什么Java习语?带串联的字符串构造函数,java,idioms,Java,Idioms,在我正在使用的代码库中,我看到了这个习语的使用。有人能给我解释一下吗 new String("" + number) // `i` is an instance of Integer 对于某些上下文,该方法大致如下所示: public String someMethod(String numberString) { Integer number = new Integer(numberString); // other stuff happens... return n
new String("" + number) // `i` is an instance of Integer
对于某些上下文,该方法大致如下所示:
public String someMethod(String numberString) {
Integer number = new Integer(numberString);
// other stuff happens...
return new String("" + number);
}
这个习惯用法用于自动将整数
数字
转换为字符串
String
构造函数需要类型为String
的参数。表达式新字符串(数字)
将无法编译。合并空字符串是将整数转换为字符串的一个小技巧
当然,您可以使用newstring(number.toString())
或String.valueOf(number)
注意:正如Jon Skeet在评论中提到的,根本不需要使用
new Sring()
。您可以返回number.toString()
或返回字符串。valueOf(number)
此ideom是将任何基元或对象类型转换为字符串的最简单方法
这很简单:键入“”+number
比键入String.valueOf(number)
(或Integer.toString(number)工作量更少
。后者是将int
转换为String
的常用方法。哪一种更清晰、更受欢迎是一个品味问题。你会发现这两种版本的拥护者
但请注意三件事:
String.valueOf(number)
更快,因为“”+number
将成为字符串串联,它将被编译为
new StringBuilder().append("").append(number).toString()
但是,除非这条语句在代码中处于热门位置,否则差异根本不重要。即使在热门位置,差异也可能可以忽略不计number.toString()
也是一个选项,因为number
是一个带框的整数。但是,如果number
为空,这将触发空指针异常,因此请小心新字符串(“+number”);
简直是垃圾!它将结果包装成一个新构建的字符串。这会创建一个不必要的副本并花费宝贵的额外击键。它还会在代码中生成不必要的样板噪声。最后一行编译为:
new String(new StringBuilder().append("").append(number).toString())
要将int
转换为字符串,这是一项相当艰巨的工作。首先创建一个StringBuilder,然后创建一个生成字符串,然后再创建一个该生成字符串的副本。这将创建三个对象,而不是一个对象这很可能只是一个没有经验的Java程序员试图将数字转换成字符串 使用
“”+number
将数字转换为字符串是否是一种良好的做法。我发现String.valueOf(number)
更清楚(尽管它在语义上是等效的)
完全没有必要将结果包装在
新字符串(…)
中,除非您(出于某种无法想象的原因)真的需要一个新的字符串,即一个在引用上与其他字符串不同的字符串。我想说作者对Java缺乏经验。不知道你为什么会这样做。这只是废话。一旦数字与一个字符串连接起来,就不需要交给另一个字符串的构造函数。这是一个非常糟糕的编程,而且你需要应该删除它。使用新字符串(…)
甚至可以避免实习生池,因此在内存方面不如“”+number
有效。如果我错了,请有人纠正我。@williammerrison只有字符串文字才可以,除非你自己更改代码;)@williammerrison-我认为编译器不会强制转换“+someNumber
转换为字符串文字,但不管怎样,将该值转换为字符串构造函数的参数都是非常愚蠢的。但是为什么新字符串(…)
而不仅仅是”+number
?而且“+number
无法像number.toString()那样清楚地表达您要做的事情呢或String.valueOf(number)
,我认为“+number
比((整数)number)更清晰
。无论如何,这基本上是数字到字符串的转换。
。至于他们为什么使用显式构造函数来创建字符串而不是串接的结果,我自己也不确定。我认为这不应该有什么区别。@Zhuinden字符串。valueOf(number)
比更清楚。”“+number
@Zhuinden:你为什么要先将其转换为Integer
?没有人建议。String.valueOf(number)
在这种情况下只调用number.toString()
。只要number
是非空的。只要number
没有更改,新整数
就不应该是null
。