2017-11-04 183 views
0

好的抱歉如果我正在复制,但我真的看过网站,似乎没有发现类似于我的问题的东西。或者至少它是为其他人工作,但不适合我。“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异常

+3

'null'和'“null”'是完全不同的...... –

+0

null和“null”确实完全不同,但在我的情况下它只是“null”,因为它们只是字符串而不是它们? @LouisWasserman –

+0

你是什么意思,“他们只是字符串”?你可以有一个空的字符串,而不是“null”。 –

回答

3

空字符串必须是:

String nullString = null; 

原因 '空' 指的是未引用的对象(永远铭记在Java是一种对象)

String nullString = "null"; 

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

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

结果在您看到的输出中。这就是导致字符串concatination:

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

...现在需要考虑的唯一参考值。如果参考 为空,则将其转换为字符串“null”(四个ASCII字符 n,u,l,l)。否则,执行转换就好像通过 调用引用对象的toString方法而没有参数 ;但如果调用toString方法的结果为空,则使用 ,则使用字符串“null”。

+0

哇谢谢,这实际上真的很有帮助,超快,并让我了解这个问题,除了解决它。 非常感谢,你摇滚! :) –

相关问题