好的,很抱歉,如果我正在复制,但我真的浏览了整个网站,似乎没有发现类似的问题。或者至少它对其他人有效,但对我无效
我的主要问题是我使用了一个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"。