objectequals(object)方法的工作性质

nwwlzxa7  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(251)

当我在hackerrank里讨论一个问题的时候。我写了不完美的代码,但我得到了错误的答案,但我想知道我是怎么得到这个注解的:通过将return语句改为 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\u object.equals(string\u 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 class和char array尝试了我的原始代码的代码片段它对character类很好,但对char array不起作用。

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,但不是为什么?
对不起,我英语不好。

u91tlkcl

u91tlkcl1#

a、 equals(b)与a==b相同,即它是同一个数组。equals(aa,bb)比较数组的内容。
来自java文档;
character类将原语类型char的值 Package 到对象中。character类型的对象包含一个类型为char的字段。对象类型使用equals方法进行equals比较https://www.geeksforgeeks.org/character-equals-method-in-java-with-examples/

相关问题