基本数据类型是值比较,引用类型是引用比较
"==" 比较对象的内容,值类型比较,Integer/String 包装类和基本数据类型比较时拆箱做值比较
equals() 比较对象的内容,引用类型比较 //equals是Object的方法,基本数据类型不能调用
Integer a = new Integer(3); //堆中的对象,为引用类型
Integer a2 = new Integer(3);
Integer b = 3; //常量池中的对象,为值类型
int c = 3; //值类型
System.out.println(a == b); //false,引用类型和值类型不能用==比较
System.out.println(a == a2); //false,引用类型之间不能用==比较
System.out.println(a == c); //true,包装类和基本数据类型比较时拆箱做值比较
System.out.println(b == c); //true,包装类和基本数据类型比较时拆箱做值比较
System.out.println(a.equals(b)); //true
System.out.println(a.equals(a2)); //true
System.out.println(a.equals(c)); //true
String x = "str"; //常量池中的对象,x y指向同一个引用
String y = "str";
String z = new String("str"); //堆中的对象
String z2 = new String("str"); //
System.out.println(x == y); //true
System.out.println(x == z); //false
System.out.println(x.equals(y)); //true
System.out.println(x.equals(z)); //true
System.out.println(z.equals(z2)); //true
String s1 = new String("苹果");
String s2 = new String("苹果");
Cat c1 = new Cat("name");
Cat c2 = new Cat("name");
System.out.println(s1.equals(s2)); //true
System.out.println(c1.equals(c2)); //false