【问题标题】:Java prints "null" for String reference != to nullJava 为字符串引用打印“null”!= 为 null
【发布时间】:2012-01-11 16:50:07
【问题描述】:

我有大代码和这样的行:

System.out.println(car.getName());
System.out.println(car.getName() == null);

第一行打印输出: 空

但是第二行打印出来的是假的,所以 null == null 是假的?

我也尝试过System.out.println(car.getName() == "null");,因为 getName 返回字符串但结果相同

【问题讨论】:

  • car.getName() 返回什么?空还是“空”?
  • 试试System.out.println(student.getName().equals("null"));
  • 那是学生还是汽车?无论如何,尝试 car.getName().equals("null")
  • @JackEdmonds 啊对,是String的方法,我写的时候返回true System.out.println(car.getName().equals("null"))
  • @Templar:那么您的代码中有一个主要的设计问题。如果意图表示“无价值”,则永远不应将 null 存储为字符串 "null"。也许在某个地方有一个name = String.valueOf(someObj)

标签: java object null boolean


【解决方案1】:

当涉及到字符串时,您需要使用equals 方法:

System.out.println("null".equals(car.getName());

如果它实际上返回与null不同的字符串“null”。

为什么用equals而不是==,我找不到比这个one更简单的解释了:

要比较字符串是否相等,请不要使用 ==。 == 运算符检查两个对象是否完全相同。两个字符串可能是不同的对象,但具有相同的值(其中包含完全相同的字符)。使用 .equals() 方法比较字符串是否相等。

【讨论】:

  • 如果它真的返回了null,那将抛出一个NullPointerException
  • 你说得对,编辑它,因为他说它返回一个字符串,谢谢。
  • 为什么String a = "foo"String b = "foo"a == b 一起使用?
  • @Templar 这篇文章很好解释:javatechniques.com/blog/string-equality-and-interning
  • @Templar 简单地说,在这种情况下,它不会测试内容,而是测试对象是否相等。
【解决方案2】:

如果我不得不猜测,您的代码中有这样的内容:

public String getName()
{
    return "null"; 
}

所以,当您运行测试时,

System.out.println(car.getName() == null);

它正在使用值null 测试字符串对象"null",这确实是错误的。

【讨论】:

    【解决方案3】:

    结果是“null”,而不是null,所以你的代码是:

    System.out.println(car.getName().equals("null"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多