题目:假设有以下代码String s = "hello";String t = "hello";char c [ ] = {'h','e','l','l','o'};下列选项中返回false的语句是?
A、s.equals (t);
B、t.equals (c);
C、s==t;
D、t.equals (new String ("hello"));
答案:C。
看一下equals的源码:
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;
}
很明显。char[]不是String的对象所以。返回肯定是false了。
小总结:
1. java数据类型分为:
* 基本数据类型
* 引用数据类型
2.对于"=="
*用于基本数据类型相互比较. 比较二者的值是否相等.
*用于引用数据类型相互比较. 比较二者地址是否相等.
*不能用于基本数据类型与引用型比较.
3.对于"equals":
* 不能用于基本数据类型比较(因为这是一个方法, 继承自object).
*用于进行对象的比较, 比较二者的引用地址是否相同.
4.特殊情况:
1)数值型基本类型和数值型类会存在自动装箱和自动拆箱.
2)字符串会以常量形式存在, 如果多个字符串变量值相同, 则他们指向同一个地址.
3)数值类型会存在类型自动转换.
5.本题对照上面规则解题.
6.附上java类型图示: