【问题标题】:Cannot invoke equals(boolean) on the primitive type boolean无法在原始类型 boolean 上调用 equals(boolean)
【发布时间】:2015-05-12 05:56:56
【问题描述】:

我想检查字符串的第一个和最后两个字符是否相等,所以我写了类似的条件

if (str.length() >= 4
            && ((str.startsWith(str.substring(0, 2))).equals(str.endsWith(str
                    .substring(str.length() - 3, str.length() - 1)))))

但我收到错误消息 无法在原始类型 boolean 上调用 equals(boolean)

那么根本原因是什么?

【问题讨论】:

  • 原始类型(不是对象)与其他所有类型之间存在差异。 String#startsWith 返回 boolean...

标签: java string if-statement


【解决方案1】:

错误即将到来,因为:str.startsWith() 返回 boolean 值,我们使用 Boolean

调用 equals()

使用此表达式进行比较:

    str.substring(0, 2).equals(str.substring(str.length() - 3, str.length() - 1))

【讨论】:

    【解决方案2】:

    我想检查字符串的第一个和最后两个字符是否相等

    这不是你正在做的。您正在使用 startsWithendsWith - 您在询问一个字符串是否以它自己的前两个字符开头,以及它是否以接近结尾的字符串的某些部分结尾,然后尝试比较这些结果比较...除了您尝试将两个boolean 值与equals 而不是== 进行比较,这也不起作用。

    您在这里只需要substringequals - 但您的substring 也不正确,因为您在查找最后两个字符时遇到了一个错误。为简单起见,我个人会将其分开:

    if (str.length() > 4) {
        String start = str.substring(0, 2);
        // If you don't specify an end point, it'll be "the rest of the string"
        // which is what you want.
        String end = str.substring(str.length() - 2);
        if (start.equals(end)) {
            ...
        }
    }
    

    【讨论】:

      【解决方案3】:

      endsWith api 将返回一个布尔值,因此编译器正在编译您正在尝试将字符串与布尔值进行比较。相反,您可以执行以下操作:

      if (str.endsWith(str.substring(0, 2))) {
           //ye it does ends with same string as it starts with
      }
      

      【讨论】:

        【解决方案4】:

        startsWith(String) 方法返回一个布尔值,指示它所应用的字符串是否有效地以字符串参数开头。为了将前两个字符与后两个字符进行比较,您的布尔条件可以是:

        if(str.length() >= 4 && str.startsWith(str.substring(str.length - 3, str.length()))
        

        注意 substring 方法中的索引,因为最后一个参数表示不包含在子字符串中的第一个字符的位置。 结果相同,但使用 endsWith(String) 方法:

        if(str.length() >= 4 && str.endsWith(str.substring(0, 3)))
        

        或仅使用sunbstring(int, int) 方法:

        if(str.length() >= 4 
        && str.substring(0, 3).equals(str.substring(str.length() - 3, str.length())))
        

        【讨论】:

          【解决方案5】:

          你的问题源于

          ((str.startsWith(str.substring(0, 2))).equals(str.endsWith(str
                          .substring(str.length() - 3, str.length() - 1))))
          

          这基本上归结为boolean.equals(...),这是无法做到的,因为boolean不是Object

          您可以改为使用String#startsWithString#endsWith,例如...

          if (str.length() >= 4 &&
              str.endsWith(str.substring(0, 2)) &&
              str.startsWith(str.substring(str.length() - 2))) {
          

          甚至可能

          if (str.length() >= 4 &&
              str.substring(0, 2).equals(str.substring(str.length() - 2))) {
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-05-19
            • 2013-09-18
            • 2014-04-24
            • 1970-01-01
            • 1970-01-01
            • 2016-03-14
            • 1970-01-01
            相关资源
            最近更新 更多