//==和equal()方法的区别
/*输出结果
* str.equals(str1)true
str.equals(str2)true
str1.equals(str2)true
false
false
false
*/
public class Test1 {
public static void main(String args[]) {
String str = new String("i like java");
String str1 = new String("i like java");
String str2 = "i like java";
String str3 = "i like java"; System.out.println("str.equals(str1)"+str.equals(str1));
System.out.println("str.equals(str2)"+str.equals(str2));
System.out.println("str1.equals(str2)"+str1.equals(str2));
System.out.println("str==str1)"+str1 == str);
System.out.println("str1==str2)"+str1 == str2);
System.out.println("str3==str2)"+str3 == str2);
}
}
/*输出结果
* str.equals(str1)true
str.equals(str2)true
str1.equals(str2)true
false
false
false
*/
public class Test1 {
public static void main(String args[]) {
String str = new String("i like java");
String str1 = new String("i like java");
String str2 = "i like java";
String str3 = "i like java"; System.out.println("str.equals(str1)"+str.equals(str1));
System.out.println("str.equals(str2)"+str.equals(str2));
System.out.println("str1.equals(str2)"+str1.equals(str2));
System.out.println("str==str1)"+str1 == str);
System.out.println("str1==str2)"+str1 == str2);
System.out.println("str3==str2)"+str3 == str2);
}
}
equals方法被String类重写了,变为比较字符串内容是否相同了,所以输出false;
而 == 是比较应用是否相同,当然不相同,所以输出false
equals方法被String类重写了,变为比较字符串内容是否相同了,所以输出true;
是不是应该改成System.out.println(("str==str1)"+(str1 == str))就算面试会问到这种问题,应该也不会问到System.out.println("str==str1)"+str1 == str);这种情况吧,哈哈。如果就像楼主这样写的话 后三个也毫无疑问是false了
如果要是像我改的那样,那最后一个是true剩下两个是false
原因1楼已经说的很明白了
str==str1的比较,你可以看作是 str.getClass()==str1.getClass()
你自己去试试System.out.println(str.getClass());看看输出的是什么
比如2个字符串对象
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。在Object类源码中是这样写的。
public boolean equals(Object obj) {
return (this == obj);
}
他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。
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;
}String里的方法,如果==号比较不相等,还会进行一下值的比较。
所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。
int i = 1;
int j = 1;
i == j 为true,因为值相同。Integer i = new Integer(1);
Integer j = new Integer(1);
i == j 为false,因为i和j的值不同。所需要区分的是,基本类型变量的值和引用类型变量的值是什么含义。认识到引用变量的值和对象的不同,也就理解了。
或许这里讲的更详细一点http://wenku.baidu.com/view/2d25e10d4a7302768e9939d7.htmlhttp://www.360doc.com/content/10/0829/15/2305723_49651719.shtmlhttp://devilcy.javaeye.com/blog/786678希望对你有帮助