【问题标题】:How to assign a null reference to a String in Java [duplicate]如何在Java中为字符串分配空引用[重复]
【发布时间】:2021-09-07 11:39:26
【问题描述】:

下面的代码测试字符串 myStr 和 newStr 是否包含相同的值。我预计结果是相等的,但令我惊讶的是,String newStr = null 行似乎导致 newStr 将“null”作为实际文本。这是正确的吗?

我希望它只是被分配对任何内容的引用,导致此时没有任何值。

String myStr = "java";
char[] myCharArr = {'j', 'a', 'v', 'a'};
String newStr = null; // not an empty reference but assigning the text "null"?
for (char value : myCharArr) {
   newStr = newStr + value;
}
System.out.println(newStr == myStr); // results in false: newStr is 'nulljava' and myStr 'java'    

请注意,当将 "String newStr = null" 更改为 String newStr = new String() 时,您确实会得到一个空引用,并且 newStr 最终将只是“java”。

【问题讨论】:

  • 首先你应该检查这个:stackoverflow.com/questions/4260723/… 其次,你应该使用equals方法来得到两个字符串比较的正确结果。请检查此链接,例如:stackoverflow.com/questions/7520432/…
  • 当你的newStr 仍然是null 时,你期望newStr + value 在循环的第一次迭代中计算出什么? IE。你认为null + 'j' 是什么?
  • String newStr = null; 将导致 newStr 具有值 null (或更准确地说,它不引用任何内容)。然而,在字符串连接中,Java 对null 有特殊处理,即将其转换为"null",这就是newStr + "java" 导致"nulljava" 的原因。将 newStr 初始化为空字符串,例如newStr = "".
  • 它是“取值”,只是因为您连接/打印“空字符串”......(唯一)替代方案将是一个例外,对吧!? ...抱歉,它的行为不像“空字符串”(如您所料)
  • 好的,所以当您打印字符串或向其添加一些其他值时,null 将转换为“null”。当你在它上面使用一个 concat 时.. 你会除了它来连接到“null”,但这次它会抛出一个 NullPointerException。

标签: java string null


【解决方案1】:

表演时

newStr = newStr + value;

newStr 中的null 被转换为字符串,即"null"。您应该记住的另一件事是== 比较引用,并且要比较Strings 本身,您应该改用str1.equals(str2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2014-05-16
    相关资源
    最近更新 更多