[size=medium]今天参加一个笔试,看到如下题目:
String s = "hi";
char[] c = {'h','i'};
System.out.println(s.equals(c));
请问 为什么输出的是 false?
[/size]
恩 去看看String类的源代码
[code="java"] public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
......
}
return false;
}[/code]
anObject instanceof String 这个判断很重要,也就是说String类型与非String类型进行equals的比较是没有意义的。你传进来的参数的实际类型是数组类型,因此 anObject instanceof String =false
c是基本数据类型吧,equals(Object anObject)返回值这样定义的
Returns:
true if the given object represents a String equivalent to this string, false otherwise
equals 比较此字符串与指定的对象。而C是一个字符数组对象,所以为false。
这样吧,你可以去看一下String类的equals方法,看它是怎么实现的,你就明白为什么会是false了!