"null" 字符串 .equals( "null" ) 返回 false java (JOptionPane)



好的,很抱歉,如果我正在复制,但我真的浏览了整个网站,似乎没有发现类似的问题。或者至少它对其他人有效,但对我无效

我的主要问题是我使用了一个JOptionPane,并将结果存储在一个String中。当点击关闭按钮时,存储在字符串中的值是"0";空";正如我在控制台中注意到的那样。

String addedItemName = (String)addItemPane.showInputDialog(null,"Select item to add to basket","Add Item",JOptionPane.QUESTION_MESSAGE,null,items,"Select Item");
System.out.println("added item : " + addedItemName);

在控制台中得到这个结果:

添加项目:空

因此,我想通过将我的addedItemName字符串与";空";一串这似乎从来都不起作用,而且让我很沮丧,因为我真的不明白。以下是我做的其他一些测试,以展示我是如何尝试各种不同的方法,但仍然不起作用的。

String nullString = "null";

boolean test1 = Objects.equals(addedItemName, nullString);
boolean test2 = Objects.equals(nullString,addedItemName);
boolean test3 = nullString.equals(addedItemName);
boolean test4 = nullString.equalsIgnoreCase(addedItemName);
System.out.println(addedItemName);
System.out.println(nullString);
System.out.println(test1);
System.out.println(test2);
System.out.println(test3);
System.out.println(test4);

当我点击关闭按钮时,有以下控制台输出:

错误

错误

错误

错误

所以基本上,控制台向我显示addedItemName是"空";当点击关闭按钮时;空";字符串,不知何故,它永远不相等。

感谢任何人向我展示我到底有多愚蠢,以及为什么因为一个愚蠢的简单原因而不起作用。

(也是一个小问题,但不知道这是否重要:即使字符串得到值,这些相等测试行也会返回nullPointerException错误)

boolean test1 = addedItemName.equals(nullString);
boolean test2 = addedItemName.equalsIgnoreCase(nullString);
System.out.println(addedItemName);
System.out.println(nullString);

输出:

线程中的异常";AWT-EventQueue-0";java.lang.NullPointerException

空字符串必须是:

String nullString = null;

原因"null"表示未引用的对象(请记住,java中的所有内容都是对象)

String nullString = "null";

是对包含字母null的字符串的有效引用您的输出有点模糊,导致

System.out.println("added item : " + null);

结果在您看到的输出中。这就是字符串凹陷的原因:

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

。。。现在只需要考虑参考值。如果引用为null,则转换为字符串"null"(四个ASCII字符n、 u,l,l)。否则,转换将像通过调用引用对象的toString方法,但没有论据;但是如果调用toString方法的结果为null,则使用字符串"null"。

最新更新