1、比较代码
public class Test13 {
public static void main(String[] args) {
String s1="aa";
String s2="aa";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println("------------------------");
String s3 = new String("bb");
String s4=new String("bb");
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
}
}
2、结果
true
true
------------------------
false
true
3、分析
(1)==与equals()
是比较地址是否相等,而equals()方法则是比较内容是否相等;
(2)string 的直接赋值和通过new方法
string直接赋值,如果Java string池里已有aa字符串,当再次赋值时,不会再分配内存地址。而new会再次分配一个地址。所以第一个地址相同,而第二个地址不同。
4、Object的和equals()与String重写的equals()方法
package com.jit.edu.demo09;
public class Test07 {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = o1;
System.out.println("o1.hashCode() "+o1.hashCode());
System.out.println("o2.hashCode() "+o2.hashCode());
System.out.println("o3.hashCode() "+o3.hashCode());//与o1的hashcode相同
System.out.println("o1=o2 "+o1==o2);//比较地址
System.out.println("o1.equals(o2) "+o1.equals(o2));//比较地址
System.out.println(o1==o3);//比较地址
System.out.println("o1.equals(o3) "+o1.equals(o3));//比较地址
//String重写了equals方法,比较内容
String s1 = "1";
String s2 = s1;
String s3 = new String("1");
System.out.println("s1.hashCode() "+s1.hashCode());
System.out.println("s2.hashCode() "+s2.hashCode());
System.out.println("s3.hashCode() "+s3.hashCode());
System.out.println(s1==s2);//比较地址
System.out.println("s1.equals(s2) "+s1.equals(s2));//比较内容
System.out.println("s1==s3 "+s1==s3);//比较地址,地址不同
System.out.println("s1.equals(s3) "+s1.equals(s3));//比较内容
}
}
5、结果
o1.hashCode() 1915318863
o2.hashCode() 1283928880
o3.hashCode() 1915318863
false
o1.equals(o2) false
true
o1.equals(o3) true
s1.hashCode() 49
s2.hashCode() 49
s3.hashCode() 49
true
s1.equals(s2) true
false
s1.equals(s3) true
Process finished with exit code 0