toString vs toString(参数)vs java中的valueOf(参数)

时间:2014-11-14 12:28:22

标签: java string casting tostring

我仍然感到困惑的是这三种方法之间的确切区别

例如:

Double d = 19.23456;
System.out.println(d.toString());
System.out.println(Double.toString(d));
System.out.println(String.valueOf(d));

所有上述方法都打印了这个值,但我想更多地了解这些方法之间的逻辑含义和差异。哪种方法适合哪种情况?

我已经通过以下链接,其中接受的答案声明toString(参数)和valueOf(参数)是相同的。那么toString呢?可能是我错过了一个重要的观点。如果是这样,请将注意力转向它。

Integer.toString(int i) vs String.valueOf(int i)

我已阅读文档,但在阅读后我无法弄清楚差异。

根据官方文件:

的toString

 Returns a string containing a concise, human-readable description of this object.
 Subclasses are encouraged to override this method and provide an implementation that takes into account the object's type and data. 
The default implementation is equivalent to the following expression: 

           getClass().getName() + '@' + Integer.toHexString(hashCode())

的toString(参数)

Returns a string containing a concise, human-readable description of the specified double value

的valueOf(参数)

Converts the specified object to its string representation. If the object is null return the string "null", otherwise use toString() to get the string representation.

提前谢谢

修改

我很满意Eran和zapl提供的答案。每个答案都在特定的视角内清除了此方法的概念。为了接受答案,我会接受一个。谢谢你清除我的怀疑。

2 个答案:

答案 0 :(得分:3)

Integer.toString()Integer.toString(int)之间的区别在于后者是静态方法,因此可以为原始变量调用。前者是实例方法,只能在引用类型上调用。

String.valueOf(Object)toString()实例方法不同,因为String.valueOf(null)会返回“null”,而null.toString()会抛出NullPointerException。 传递空Integer.toString(int)引用时,NullPointerException也会抛出Integer,因为尝试取消Integer会导致该异常。

因此,如果您有Integer i变量,String.valueOf(i)的行为与i.toString() Integer.toString(i) inull的行为不同。< / p>

答案 1 :(得分:2)

  

这三种方法之间的确切区别是什么?

几乎没有。

通过JDK8的String.java

当您拥有原始double时,它不能null并直接转发到Double

3125  public static String valueOf(double d) {
3126      return Double.toString(d);
3127  }

如果您有Double的盒装null值,则会打印“null”或转发到对象toString()方法。

2978  public static String valueOf(Object obj) {
2979      return (obj == null) ? "null" : obj.toString();
2980  }

JDK 8的Double.java

为避免代码重复,这只是将内部值转发给静态方法

643  public String toString() {
644      return toString(value);
645  }

静态方法通过委托一些“内部”实现来完成“实际工作”。

203  public static String toString(double d) {
204      return FloatingDecimal.toJavaFormatString(d);
205  }

无论你做什么。如果有值要打印,那么Double#toString(double d)将完成这项工作。这同样适用于Integer,..

当您执行String.valueOf(Object)时,也会使用println("Value is: " + value)。它会打印"null",而不是尝试在非现有对象上调用toString方法。