Java中如何为String分配null引用?为何拼接时出现null文本?
Java字符串拼接null异常结果问题解答
核心规则说明
你遇到的现象是Java字符串+运算符的标准规定,不属于异常情况:
String newStr = null这行代码本身的作用确实是给newStr赋值空引用,并没有直接把"null"作为文本赋值给变量,你的初始认知是正确的。- 问题出在字符串拼接逻辑:Java语言规范明确要求,使用
+做字符串拼接时,如果参与运算的操作数为null引用,会自动将其转换为字符串"null"后再参与拼接。 - 你的代码第一次循环执行时,运算逻辑为
newStr = null + 'j',自动转换后得到"nullj",后续再拼接剩下的a/v/a三个字符,最终得到的结果是"nulljava",和"java"自然不相等。 - 额外纠正:你代码中用
==比较字符串内容是错误用法,==比较的是两个字符串的内存引用地址,要比较内容应该使用equals方法:System.out.println(newStr.equals(myStr));
空字符串初始化误区纠正
你提到String newStr = new String()会得到空引用,这个说法是错误的:
new String()创建的是一个内容为空的真实字符串对象,不是空引用,它的内容值为""。- 用空字符串初始化的情况下,拼接逻辑为
"" + 字符,不会额外拼接多余内容,最终得到的就是"java",符合你的预期。 - 日常开发中如果要初始化空字符串,更推荐直接写
String newStr = "",无需调用构造方法创建额外对象。
正确实现代码示例
String myStr = "java"; char[] myCharArr = {'j', 'a', 'v', 'a'}; String newStr = ""; // 初始化为空字符串,而非null for (char value : myCharArr) { newStr = newStr + value; } System.out.println(newStr.equals(myStr)); // 输出结果为true
内容的提问来源于stack exchange,提问作者Pieter
相关产品推荐
相关产品推荐

