java - Java中null的字符串化

标签 java

<分区>

考虑

public String toString()
{
    return foo + bar;
}

其中 foobar 都是类的字段。

如果 foobar 中的一个或两个都是 null,JLS 是否保证为每个字段返回字符串 (null),还是保留抛出 NPE 的权利?

最佳答案

http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.11 :

If the reference is null, it is converted to the string "null" (four ASCII characters n, u, l, l).

是的,它不会抛出 NPE(只要 + 解析为字符串连接,而不是算术运算)

编辑:

实际上,仔细观察,该行为并未在技术上定义。

字符串转换仅适用于 + 的非字符串参数。如果两个参数都是字符串,则不会进行任何转换(因此 5.1.11 不适用)。

然后我们转到 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18.1 , 仅指定以下内容:

...The characters of the left-hand operand precede the characters of the right-hand operand in the newly created string.

请注意,没有对 null 的引用。

所以我不认为 (String)null + (String)null 的行为是技术上定义的...

关于java - Java中null的字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35339307/

相关文章:

java - 从 Eclipse 快速调试 Flex/Java Web 应用程序?

java - 关闭选定的 Spring Boot 系统指标

java - Android 位图图像到 Unity C# 纹理

java - Haproxy + 网络 : Way to prevent exceptions on connection reset?

java - 如何将 NetBeans Java Web 应用程序项目的 jar 文件添加到 Ant,以便在 Jenkins 上构建它?

java - 在键/值对中仅使用一个键有效地查找值,时间复杂度明智 : Java

java - 是否可以使用移动设备和 QRCodes 通过两因素身份验证来实现 OAuth?

java - string类的哪些对象是final的,是否有任何对象是final的

java - 如何使用正则表达式将字符串从一种模式转换为另一种模式?

java - Jetty 插件如何为 Maven 工作?