问题描述
public static void main(String[] args) {String a="d";char b='d';System.out.println(a.equals(b));}这个输出的结果是什么,求付上理由
解决方案
public boolean equals(Object anObject) {if (this == anObject) { return true;}if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) { if (v1[i++] != v2[j++])return false;}return true; }}return false; }看JDK的源码,b传进来,anObject应该是个Character对象。==肯定不符合,anObject也不是String类的实现,那只能返回false了。
解决方案二:
要想知道什么情况,断点调试一下就可以看得很清楚!
解决方案三:
equals(Object anObject) 该方法需要的是一个object,而测试程序中传的是一个char,char会被自动封装成对应的类,也就是上面的兄弟说的Character类,所以返回false。
解决方案四:
JDK的源码 java.lang.String中的 equals方法 : public static void main(String[] args) {String a="d";char b='d';System.out.println(a.equals(b));} // 执行过程分析public boolean equals(Object anObject) { // a 引用和b 引用,不是同一个应用地扯值,所以这里不会return true;if (this == anObject) { return true;} //b 不是string 的实例引用,所以进入不下此判断,return false了。if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) { if (v1[i++] != v2[j++])return false;}return true; }}return false; }