equals与== hashcode
== 作用于两个对象上时 比较的时对象的引用(reference)是否指向同一对象
String 覆写了父类Object的equals方法 内容相同时返回true
运行结果:
false
false
(a==b):true
(a==c):false
a equals b:true
a equals c:true
a.hashcode:96354
b.hashcode:96354
c.hashcode:96354
String这个类的equals方法比较特殊,它先比较引用,如果引用相等,那么返回值就是true,如果引用不相等,
那么再比较值,如果值相等,那么返回值也是true,只有当引用和值都不相等的情况下,返回的才是false
关于String中的intern()方法,此方法返回的始终是String pool中的字符串,我也在以前的文章说过,String的创建过程,如果String pool中不存在此字符串,那么创建一个新的返回,如果有的话,就直接返回此对象,
遵循对于任何两个字符串 s 和 t,
当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
== 作用于两个对象上时 比较的时对象的引用(reference)是否指向同一对象
String 覆写了父类Object的equals方法 内容相同时返回true
String a="abc";
String b="abc";
String c = new String("abc");
System.out.println("a==b:"+a==b);
System.out.println("a==c:"+a==c);
System.out.println("(a==b):"+(a==b));
System.out.println("(a==c):"+(a==c));
System.out.println("a equals b:"+a.equals(b));
System.out.println("a equals c:"+a.equals(c));
System.out.println("a.hashcode:"+a.hashCode());
System.out.println("b.hashcode:"+a.hashCode());
System.out.println("c.hashcode:"+a.hashCode());
运行结果:
false
false
(a==b):true
(a==c):false
a equals b:true
a equals c:true
a.hashcode:96354
b.hashcode:96354
c.hashcode:96354
String这个类的equals方法比较特殊,它先比较引用,如果引用相等,那么返回值就是true,如果引用不相等,
那么再比较值,如果值相等,那么返回值也是true,只有当引用和值都不相等的情况下,返回的才是false
关于String中的intern()方法,此方法返回的始终是String pool中的字符串,我也在以前的文章说过,String的创建过程,如果String pool中不存在此字符串,那么创建一个新的返回,如果有的话,就直接返回此对象,
遵循对于任何两个字符串 s 和 t,
当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true