java中数据类型有基本类型和引用类型。
‘==’如果比较基本类型,直接比较值,值相等就返回true
‘==’如果比较引用类型,比较的是虚地址,不是同一个对象肯定不可能相等,就算值相同也是false
equals()方法是Object中的一个方法,基本类型无法调用此方法,他比较的也是对象的虚地址,但是很多类中都对equals方法进行了重写
比如String类重写了equals()方法,比较的是字符串的值,也就是说如果两个String类型的字符串如果值相同,那么他们比较就返回true
下面是一些实例:
String a = "a";
String b = "a";
String c = new String("a");
String d = new String ("a");
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(c == d);
System.out.println(c.equals(d));
Integer e = 14;
Integer f = 14;
System.out.println(e == f);
System.out.println(e.equals(f));
int g = 1;
int h = 1;
System.out.println(g == h);
打印结果是:
true//jvm有一个常量池,a创建的时候先去常量池里找有没有"a"这个常亮,有的话就直接拿来用,没有
就新建一个,a创建之后常量池里就有"a"了,b创建的时候先去常量池里找,有的话就直接拿来用,所以他
俩指向的是同一个对象,虚地址相同,因此返回true
true//String类重写了equals方法,比较的是字符串的值,因此返回true
false//c,d都是new出来的,并不是从常量池拿的,不是一个对象,因此返回false
true//跟第二个true同理
true//同理
true//同理
true//基本类型就不用说了吧(有人可能会问,怎么没equals,基本类型能有equals方法吗,哈哈)