【问题标题】:comparison of strings throws NullPointerException字符串比较抛出 NullPointerException
【发布时间】:2023-03-20 20:55:01
【问题描述】:

我有一个名为lettersStrings 数组。当我尝试执行以下代码行时,我得到一个NullPointerException

if(letters[j].equals(tmpst))

其中j 是小于letters 长度的任意索引

tmpst 是这样定义的字符串:

char myChar = theWord.charAt(i);
String tmpst = String.valueOf(myChar);

其中theWord 是长度大于4 的任意字符串。

完整代码为:

for (int i = 0; i < theWord.length(); i++) { 
        for (int j = 0; j < letters.length; j++) { 

            char myChar = theWord.charAt(i);
            String tmpst = String.valueOf(myChar);

            if(letters[j].equals(tmpst)) { 
                System.out.println("YOU DIDIT!!! :D");
                newWord = newWord + theWord.charAt(i);
            }

        }

谁能看出我做错了什么?

谢谢。

【问题讨论】:

  • 提供 i 和 j 取值的完整代码。
  • 索引j 一定有问题。提供完整代码
  • 数组 letters 可能未初始化

标签: java arrays string comparison nullpointerexception


【解决方案1】:

您的数组似乎包含一些空引用。你可以用Arrays.toString(letters)看看是不是真的。

如果您希望即使您的数组包含空值,您的比较仍然有效,您应该将您的代码更改为:

if(tmpst.equals(letters[j]))

【讨论】:

  • letters 数组应该带有一些 null 值,但我认为这不会有问题,因为 null 等于一个字符串
  • @Jeeter Null 不等于空字符串。如果你想让它以这种方式工作,你应该反转参数,以这种方式进行验证:if(tmpst.equals(letters[j]))。我会将其添加到答案中。
  • 在 Java 中,null 永远不会“等于”除 null 之外的任何内容。请特别注意 "" 和 null 不相等。 "" 是一个对象,null 是没有一个对象。
  • 您的最新答案对我有用。感谢您的帮助! :)
【解决方案2】:

如果表达式letters.length 评估没有问题,那么letters[j] 为空,这是唯一的可能性。您不能在空引用上调用方法。

如果它是空的,你应该写一些东西,如果它是这样的:

if (letters[j] != null && letters[j].equals(tmpst)) {

【讨论】:

    【解决方案3】:

    您需要了解其中的区别。
    例如,有一个 String myString.Now myString == null 和 myString.equals("") 是两个不同的东西。
    在使用 myString.equals("") 之前,您必须确保您的字符串已初始化且不为空。所以,你的这个错误是因为你的字符串对象在任何索引处都没有初始化。
    尝试使用myString == null检查它
    如果你有任何歧义,请随时询问:)

    【讨论】:

      【解决方案4】:

      首先检查!=null,然后使用.equals() 方法..... 因为null 不是字符串。所以不能使用.equals() 方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        • 1970-01-01
        • 2017-04-14
        • 2011-07-06
        • 1970-01-01
        相关资源
        最近更新 更多