当我在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,但不是为什么?
对不起,我英语不好。
1条答案
按热度按时间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/