[英]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
变量,则当i
为null
时, 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.