将原始数据类型转换为String的更好方法是什么?

时间:2011-07-13 12:39:17

标签: java

我可以使用

将整数转换为字符串
String s = "" + 4; // correct, but poor style
or
String u = Integer.toString(4); // this is good

我可以使用

将double转换为字符串
String s = "" + 4.5; // correct, but poor style
or
String u = Double.toString(4.5); // this is good

我可以使用String s = "" + data方法将int或double转换为String。如果我想使用toString()的其他方法,我必须使用每种数据类型的Wrapper类。那么为什么在some books中提到第一种方法是差的,而第二种方法则更好。 哪种方法更好,为什么?

9 个答案:

答案 0 :(得分:66)

我会用

String.valueOf(...)

您可以对所有类型使用相同的代码,但不会出现可怕且无意义的字符串连接。

请注意,它也会准确说出您想要的内容 - 与给定原始值对应的字符串值。将其与"" + x方法进行比较,即使您无意连接任何内容,也应用字符串连接,并且空字符串与您无关。 (它可能更昂贵,但是我更关注的是可读性,而不是性能。)

答案 1 :(得分:31)

String.valueOf()怎么样?对于所有原始类型,重写重写,并为toString()委托参考类型。

答案 2 :(得分:10)

String s = "" + 4;

编译为此代码:

StringBuffer _$_helper = new StringBuffer("");
_$_helper.append(Integer.toString(4));
String s = _$_helper.toString();

显然这很浪费。 请记住,在场景后面,如果在String中使用+ in

,编译器总是使用StringBuffers

答案 3 :(得分:9)

还有第三个 - String.valueOf(..)(调用Wrapper.toString(..)

实际上编译器会在这些地方添加Wrapper.toString(..),所以它在字节码方面是相同的。但""+x更加丑陋。

答案 4 :(得分:6)

字符串连接方式创建了一个额外的对象(然后获得GCed),这就是为什么它被认为是“更穷”的一个原因。此外,它更棘手,更不易读,正如Jon Skeet指出的那样,通常是一个更大的考虑因素。

答案 5 :(得分:4)

我还会使用String.valueOf()方法,实际上,它使用原始类型的Wrapper对象并为您调用toString()方法:

示例,在String类中:

public static String valueOf(int i) {
        return Integer.toString(i, 10);
    }

答案 6 :(得分:2)

附加双引号是一种不好的方法,尤其是为了提高可读性。我会考虑使用一些Apache util类进行转换或编写自己的实用程序方法来执行此类操作。

答案 7 :(得分:1)

您最好知道要尝试转换为字符串的参数类型,并使编译器知道该类型。这简化了操作以及循环。当你遵循append方法时,你将类型决定留给编译器,并增加编译器的代码行来做同样的事情。

答案 8 :(得分:1)

我认为答案实际上取决于您要转换的内容以及出于何种目的,但总的来说,我不喜欢进行裸转换,因为在大多数情况下,转换为字符串是为了记录或其他人类可读性目的。

MessageFormat.format("The value of XYZ object is {0}", object);

这提供了良好的可读性,对输出格式的细粒度控制,更重要的是,它可以通过用消息包引用替换字符串来实现国际化。

我是否需要提及这也避免了调用object.toString()的可能的NPE问题?