==
如果比较的是基本数据类型,则比较的是他们的内容是否相等,如果比较的是引用数据类型,则比较的是他们的内存地址是否相同;
Object中的equals()方法
作用和== 相同,但是一般对于引用数据类型我们会重写equals方法.Java中String和基本数据类型的包装类型都重写了equals()方法,使得他们比较的是两个对象的内容是否相等.
funny
比较有趣的是== 我们知道用new创建的对象系统会为其重新分配内存空间,所以用两个引用对象如果有一者使用new创建对象,那么他们 == 的结果肯定不等,可如果他们都不是用new创建的,情况就比较复杂了.思考这样两个对象:
String s1="abc ";
String s2="abc ";
那么,s1==s2的结果为假吗?其实其结果为真,这是因为字符串常量池的存在,他们不是用new创建的,那么他们指向的是字符串常量池中同一个字符串,地址自然相等了
那么
Integer i1=56;
Integer i2=56;
Integer i3=456;
Integer i4=456;
这里的i1== i2吗?i3 == i4吗? 答案是i1 == i2结果为true而i3 == i4的结果为false.为什么会这样呢?Integer中有一个IntegerCache类,我们可以理解为它是提供了一个类似字符串常量池的东西,这个缓冲区里有-128–127的数,所以如果你的Integer对象直接赋值时其数值范围在这之内,它们也是在同一内存空间里的,超过这个范围系统会自动new一个内存空间来存放该对象.由此引申,我们发现Character同样也有这样一块缓冲区,其大小也是在-128–127之间,所以
Character c1='a';Character c2='a';//c1==c2 返回true
Character c3='中';Character c4='中';//c3==c4 返回false