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

时间:2017-11-04 01:59:30

标签: java string equals joptionpane

好的抱歉,如果我正在复制,但我真的浏览了网站,似乎没有找到与我的问题类似的东西。或者至少它适用于其他人但不适合我。

我的主要问题是我使用了JOptionPane,并将结果存储在String中。单击关闭按钮时,存储在字符串中的值为“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);

在控制台中获取此结果:

  

添加项目:null

因此,我想知道何时通过将我的addedItemName字符串与“null”字符串进行比较来点击关闭按钮。 这似乎永远不会奏效,而且让我感到非常沮丧,因为我并没有真正理解它。 以下是我做的其他一些测试,以展示我尝试的每种不同的方式,但它仍然不起作用。

        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”,但是当我将它与“null”字符串进行比较时,它在某种程度上永远不会相等。

感谢所有能告诉我实际上是多么愚蠢的人,以及为什么它不适用于一个愚蠢的简单原因。

(也是一个小问题,但不知道它是否重要:那些相等测试行返回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

1 个答案:

答案 0 :(得分:3)

null-String必须是:

String nullString = null;

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

String nullString = "null";

是对包含字母 null 的String的有效引用 你的输出有点混淆,导致

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字符   空值)。否则,转换就像执行一样   使用no调用引用对象的toString方法   参数;但是如果调用toString方法的结果为null,   那么字符串" null"而是用来代替。