gpt4 book ai didi

java - 为什么 Object 实例(为 null)上的 toString() 不抛出 NPE?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:07 26 4
gpt4 key购买 nike

考虑以下一个:

Object nothingToHold = null;

System.out.println(nothingToHold); // Safely prints 'null'

在这里,Sysout 必须期待 String。所以 toString() 必须在实例上被调用。

那么为什么 null.toString() 的效果很棒? Sysout 会处理这个吗?

编辑:实际上我在 StringBuilder 的 append() 中看到了这个奇怪的东西。所以尝试使用 Sysout。两者的行为方式相同。那么这种方法是否也很小心?

最佳答案

PrintWriterprintln(Object)(这是您编写 System.out.println(nothingToHold) 时调用的方法)调用String.valueOf(x) 如 Javadoc 中所述:

/**
* Prints an Object and then terminates the line. This method calls
* at first String.valueOf(x) to get the printed object's string value,
* then behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>Object</code> to be printed.
*/
public void println(Object x)

String.valueOf(Object) 将 null 转换为“null”:

/**
* Returns the string representation of the <code>Object</code> argument.
*
* @param obj an <code>Object</code>.
* @return if the argument is <code>null</code>, then a string equal to
* <code>"null"</code>; otherwise, the value of
* <code>obj.toString()</code> is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj)

关于java - 为什么 Object 实例(为 null)上的 toString() 不抛出 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29513497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com