【发布时间】: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