您的位置:首页 > 其它

==与equals()方法的不同

2015-07-22 17:42 489 查看
==比较分为两种情况:基本数据类型比较与引用数据类型比较

1.基本数据类型,根据基本数据类型的值是否相等来判断,相等则返回true,不相等则返回false。两端数据类型可以不同,如果转换后的数值相等,则也返回true

@Test
public void test1() {
int i = 65;
int j = 65;
char c = 65;
float f = 65.0f;
char a = 'A';
System.out.println(i == j);
System.out.println(i == c);// char型隐式转换成int型
System.out.println(i == f);// char型隐式转换成float型
System.out.println(i == a);// char型隐式转换成int型
}
以上全部是true。

2.引用数据类型,比较引用类型变量的地址值(即引用类型变量对应的堆空间的对象实体的首地址)是否相等。

@Test
public void test2() {
Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = obj1;
System.out.println(obj1);
System.out.println(obj2);
System.out.println(obj3);
System.out.println(obj1 == obj2);
System.out.println(obj3 == obj1);
}
以上打印的结果是:

java.lang.Object@5197848c

java.lang.Object@17f052a3

java.lang.Object@5197848c

false

true

equals()比较,则只能用于引用数据类型比较

以下是Object类的equal方法的源代码:

public boolean equals(Object obj) {
return (this == obj);
}


Object类中的equal()方法比较的仍然是两个引用变量的地址值是否相等

@Test
public void test3() {
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.equals(obj2));
}


以上比较的结果仍然是false。

而String类、包装类、File类、Date类都重写了Object类的equal()方法,此时的equal()方法比较的是两个对象的实体内容是否相同

@Test
public void test4() {
String str1 = new String("aaa");
String str2 = new String("aaa");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
}


以上代码中调用的equal()方法是java.lang.String.equals(Object anObject)方法,即String类重写后的方法,所以打印的结果是:

false

true

需要注意的是,StringBuffer类没有重写Object的equal()方法。

String类重写equal()方法的源代码如下:

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;
}


所以说,以后再辨析==与equal()方法时,要分情况辨析。

一道面试题:

@Test
public void testTrim() {
System.out.println((" String  ").trim() == "String");
System.out.println((" String  ").trim().equals("String"));
}


打印出的结果是;

false

true

为什么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: