【问题标题】:object equals(object) method working nature对象等于(对象)方法工作性质
【发布时间】:2021-04-12 21:48:42
【问题描述】:

当我在hackerrank中回答一个问题时。我写了不完美的代码,但我得到了错误的答案,但我想知道我是怎么得到的 注意:我知道通过将返回语句更改为return java.util.Arrays.equals(aa,bb); 。我得到了正确的答案

static boolean isAnagram(String a, String b) {
    a=a.toLowerCase();
    b=b.toLowerCase();
    char aa[]=a.toCharArray();
    char bb[]=b.toCharArray();
    
    if(a.length()!=b.length())
    return false;
    else
    {
        java.util.Arrays.sort(aa);
        java.util.Arrays.sort(bb);
        System.out.println(aa.equals(bb));
    
        return aa.equals(bb);
    }
 

代码:判断两个字符串是否包含相同频率的字符,相同返回true,相反返回false。上面的代码总是返回 false 它认为aa不是String的实例。看到下面String_object.equals(String_object)方法的内部代码,我就想到了这种现象。

public boolean equals(Object anObject) {  
  if (this == anObject) {  
      return true;  
  }  
  if (anObject instanceof String) {  
      String anotherString = (String) anObject;  
      int n = value.length;  
      if (n == anotherString.value.length) {  
          char v1[] = value;  
          char v2[] = anotherString.value;  
          int i = 0;  
          while (n-- != 0) {  
              if (v1[i] != v2[i])  
                      return false;  
              i++;  
          }  
          return true;  
      }  
  }  
  return false;  

}

所以,我用 Character 类和 char 数组尝试了我的原始代码的代码 sn-p 它适用于 Character 类,但不适用于 char 数组。

Character a='a';
Character b='a';
System.out.println(a.equals(b)); //return true

但是如果我们尝试使用 Char 数组。它返回错误。

char [] a={'a'};
char [] b={'b'};
System.out.println(a.equals(b));//return false always ( I thought it was because as a is not object of type String.

我的疑问:为什么它适用于 Character 类而不适用于 char 数组?根据 .equals() 方法代码,它也应该为 Character 类传递 false 但这不是为什么?

对不起,我的英语不好。

【问题讨论】:

    标签: java arrays string oop object


    【解决方案1】:

    a.equals(b) 与 a == b 相同,即它是同一个数组。 Arrays.equals(aa, bb) 比较数组的内容。

    来自 Java 文档;

    Character 类将原始类型 char 的值包装在一个 object.一个 Character 类型的对象包含一个字段,其类型 是字符。对象类型使用equals方法进行equals比较 https://www.geeksforgeeks.org/character-equals-method-in-java-with-examples/

    【讨论】:

    • a==b 和 a.equals(b) 不一样,先生。 a==b 检查两者的引用是否相等,其中 .equals 方法检查 a 和 b 中的内容。先生,感谢您的努力。
    • 正如我所提到的,数组就是这种情况,它只比较引用。它是为所有可变数据类型设计的,仅比较不可变类型的内容,例如 String 与 StringBuilder。
    • 那么,先生,我有一个问题,在 equals 方法中,Character 类是否有覆盖方法,但数组中没有?我可以更正答案吗?从您的回答中,我了解到 1. 对于数组 .equals() 方法和 a==b 的工作方式相同。 2.我为equals方法的内部工作放置的代码错误?如果是这样,先生,您能否提供正确等于方法的链接?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多