繁体   English   中英

Java中的toString vs toString(parameter)vs valueOf(parameter)

[英]toString vs toString(parameter) vs valueOf(parameter) in java

我仍然很困惑这三种方法之间的确切区别是什么

例如:

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

以上所有方法都将输出值,但是我想更多地了解这些方法的逻辑含义和区别。 哪种方法适合哪种情况?

我通过下面的链接,其中可接受的答案状态toString(parameter)和valueOf(parameter)是相同的。 toString呢? 可能是我遗漏了重点或其他内容。 如果是这样,请把我的注意力转向它。

Integer.toString(int i)与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的回答都感到满意。 每个答案都会在特定的角度清除此方法的概念。 为了接受一个答案,我将接受一个答案。 感谢您清除我的疑问。

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

String.valueOf(Object)toString()实例方法不同,因为String.valueOf(null)将返回“ null”,而null.toString()将抛出NullPointerException 传递空的Integer引用时, Integer.toString(int)还将引发NullPointerException ,因为尝试取消对该Integer装箱操作将导致该异常。

因此,如果您具有Integer i变量,则当inull时, String.valueOf(i)行为将不同于i.toString()Integer.toString(i)

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

几乎没有。

通过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 ,..

当执行println("Value is: " + value)时,也会使用String.valueOf(Object) println("Value is: " + value) 它输出"null"而不是尝试在不存在的对象上调用toString方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM