【问题标题】:How do I use the character's equals() method in Java?如何在 Java 中使用字符的 equals() 方法?
【发布时间】:2019-02-07 03:24:29
【问题描述】:

由于String是一个对象,所以需要使用string.equals(string)方法来确认两个字符串是否相等。

但是,为什么要使用== 来检查两个字符是否相等,char1 == char2,而不是char1.equals(char2)

【问题讨论】:

标签: java char


【解决方案1】:

也许,这将有助于理解 ==equals 的区别。

  @Test
  public void testCharacterEquals() {
    //primitive type uses == operator for equals comparasion
    char a1 = 'A';
    char a2 = 'A';
    if (a1 == a2) {
      System.out.println("primitive type comparasion: it's equal");
    }

    //From Java doc; The Character class wraps a value of the primitive type char in an object. An object of type Character contains a single field whose type is char.
    //Object type uses equals method for equals comparasion
    Character character1 = 'A';
    Character character2 = 'A';
    if (character1.equals(character2)) {
      System.out.println("object type comparasion: it's equal");
    }
  }

【讨论】:

    【解决方案2】:

    这取决于使用原始类型、char、int 等。以及使用像 String 这样的对象。可以比较像 int 这样的原始类型 1 == 1,如果您将 2 个对象相互检查 ObjectA != ObjectB。

    在此处查看此答案:Primitive vs Object type in Java 或者在这里:https://chortle.ccsu.edu/java5/Notes/chap09C/ch09C_2.html

    引用:

    原始数据类型使用少量内存来表示 单项数据。相同原始类型的所有数据都是相同的 大小。

    例如,原始类型 int 表示使用 32 位的整数。全部 int 类型的变量使用 32 位。

    Java 中只有八种原始数据类型:byte、short、int、 long、float、double、char 和 boolean。 Java 程序无法定义 任何其他原始数据类型。

    对象是一大块内存,可能包含一个 大量数据以及处理方法(小程序) 那个数据。有成千上万的标准对象类 使用 Java,程序员可以轻松地创建其他类。 (虽然有上千个标准课,但是对于这门课你 只需要熟悉十几个类。)

    其中 2 个字符串是 2 个不同的对象。因此不是同一个对象,也不是同一个字符串。虽然字符可能相同。

    【讨论】:

      【解决方案3】:

      基本上,Java 有原始类型(int、char、short、long、byte ....) 和参考数据类型/由其他原语和对象组成的对象。

      equals() 是所有 Java 对象的方法。但是 char 在 Java 中不是 Object 类型,它是一种原始类型,它没有任何方法或属性,因此要检查相等性,只需使用 == 等于运算符即可。

      【讨论】:

        【解决方案4】:

        如果需要,您也可以使用比较器。

         public static boolean compareChars(char c1, char c2){
                int comp = Character.compare(c1, c2);
                if(comp>0){
                    return false;
                }else{
                    return true;
                }
         }
         public static void main (){
           boolean b1 = compareChars('A', 'A') //return true;
           boolean b2 = compareChars('A', 'C') //return false;
        
         }
        

        【讨论】:

          【解决方案5】:

          因为char 是一个原始类型并且没有实现equals,所以== 在这种情况下直接比较char 的值,而String 是一个对象。因此,对于对象比较,相等运算符应用于对象的引用,而不是它们指向的对象。两个引用相等当且仅当它们指向同一个对象,或者都指向 null。

          如果你想比较字符串(看它们是否包含相同的字符),你需要使用equals()来比较字符串。

          因此,运算符== 检查原始类型的值是否相等,但它检查对象的引用是否相等。如果两个对象被相等的引用引用,那么Java中的引用和对象是不同的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多