查了很多资料,现在整理一下:
==:
1、对于基本数值类型比较的是两个变量的值,如果相等返回true,反之返回false
2、对于引用类型,比较的是两个对象的地址,如果两个对象引用的对象是同一个地址,则返回true,反之返回false
equals():
1、对于基本类型的包装类型,比较的是两个变量的值,因为基本数值类型的包装类型重写了equals()方法,比较的是内容。
2、对于引用类型,比较的是两个对象的地址(没有重写equals()方法),如果重写了equals()方法,则判断的是两个对象的内容(这个是按照我们的业务需来写的,业务需求也可以是其他的,不一定比较两个对象的内容)。
注意:
String a = new String("123");
String b = new String("123");
String c = "123";
String d = "123";
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a == b);
System.out.println(a == c);
System.out.println(d == c);
输出结果:
true
true
false
false
true
new 一个String对象,就会创建一个新的对象,该对象的引用存放在堆里,引用指向栈里的常量池,但String c = “123”,先判断常量池中是否有"123",如果有的还则直接指向该常量,如果没有再new一个对象。