好的抱歉如果我正在复制,但我真的看过网站,似乎没有发现类似于我的问题的东西。或者至少它是为其他人工作,但不适合我。“null”String .equals(“null”)返回false java(JOptionPane)
我的主要问题是我使用JOptionPane,并将结果存储在一个字符串中。当关闭按钮被点击时,存储在字符串中的值为“null”,正如我在控制台中注意到的那样。
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为“null”点击关闭按钮时,但是当我把它比作一个“空”的字符串,它在某种程度上永远是平等的。
感谢任何人会告诉我我是多么愚蠢,为什么它不适合愚蠢的原因。
(也有点问题,但不知道这是否是重要的:平等的测试,即使字符串中获得的价值回报NullPointerException异常错误的那些行)
boolean test1 = addedItemName.equals(nullString);
boolean test2 = addedItemName.equalsIgnoreCase(nullString);
System.out.println(addedItemName);
System.out.println(nullString);
输出:
空
null
线程“AWT-EventQueue-0”java.lang中的异常。NullPointerException异常
'null'和'“null”'是完全不同的...... –
null和“null”确实完全不同,但在我的情况下它只是“null”,因为它们只是字符串而不是它们? @LouisWasserman –
你是什么意思,“他们只是字符串”?你可以有一个空的字符串,而不是“null”。 –