Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中null的字符串化_Java - Fatal编程技术网

Java中null的字符串化

Java中null的字符串化,java,Java,考虑 public String toString() { return foo + bar; } 其中foo和bar都是类的字段 如果foo和bar中的一个或两个都为null,JLS是否保证为每个字段返回字符串(null),还是保留抛出NPE的权利 如果引用为null,则将其转换为字符串“null”(四个ASCII字符n、u、l、l) 因此,是的,它不会抛出NPE(只要+解析为字符串浓缩,而不是算术运算) 编辑: 事实上,仔细观察,这种行为在技术上并没有定义 字符串转换仅适用于+的非

考虑

public String toString()
{
    return foo + bar;
}
其中
foo
bar
都是类的字段

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

如果引用为null,则将其转换为字符串“null”(四个ASCII字符n、u、l、l)

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

编辑

事实上,仔细观察,这种行为在技术上并没有定义

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

然后我们继续,它只指定了以下内容:

…在新创建的字符串中,左操作数的字符先于右操作数的字符

注意:没有对
null
s的引用


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

它不会引发任何错误。 如果两个参数都不是字符串,它会尝试将它们转换为字符串。 null的字符串表示形式为“null” 因此,以下是输出:

foo------酒吧----foo+bar

空------空------“空”

空-----“str”---“nullstr”


“str”--null----“strnull”

关于复制,它正在向null添加一个显式的非null字符串。所以可能“+”已经处于“字符串连接”模式。我的可以将一个空值添加到另一个空值中。根据另一个问题的答案,尝试将两个空值添加到一起,这是正确的works@P45ImminentJLS(在副本中引用)表示,如果每个操作数为空,@p459(用户名):,则每个操作数都将转换为“空”哼在编辑之后,这会更有趣。我想实用的做法是在表达式前面加上
null
是null类型,而不是字符串类型-因此应用了字符串转换…@p459它肯定会像您预期的那样工作,这仅仅是规范中的一个漏洞。任何一个半体面的java编译器都能正确地处理这个问题。有人能告诉我为什么我的答案被否决了吗?我尝试了一个样本,这些都是它给出的精确输出。我哪里做错了?你观察到这种行为的事实根本没有解决JLS可能提供的任何保证。哦。谢谢null转换为“null”的事实仅来自JLS。无论如何,谢谢。我会尽量说得具体一些。