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

46 java

我可以使用将整数转换为字符串

String s = "" + 4; // correct, but poor style
or
String u = Integer.toString(4); // this is good
Run Code Online (Sandbox Code Playgroud)

我可以使用双精度转换为字符串

String s = "" + 4.5; // correct, but poor style
or
String u = Double.toString(4.5); // this is good
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 67

我会用

String.valueOf(...)
Run Code Online (Sandbox Code Playgroud)

您可以对所有类型使用相同的代码,但没有可怕的和无意义的字符串连接.

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


Mic*_*rdt 31

怎么样String.valueOf()?它被覆盖了所有原始类型的重载和委托给toString()引用类型.

  • 重载,没有被覆盖:) (12认同)
  • @Deepakkk:是的,它更好,因为(正如其他人已经说过的那样)它使代码说出它的作用而不是将预期的操作作为副作用. (2认同)

Ang*_*ere 10

String s = "" + 4;
Run Code Online (Sandbox Code Playgroud)

编译为此代码:

StringBuffer _$_helper = new StringBuffer("");
_$_helper.append(Integer.toString(4));
String s = _$_helper.toString();
Run Code Online (Sandbox Code Playgroud)

显然这很浪费.请记住,在场景后面,如果在String中使用+ inoc,编译器总是使用StringBuffers


Boz*_*zho 9

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

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


Nat*_*hes 6

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