java基础之 “==”和“ equals”以及instanceof的区别
2016-12-31 11:00
585 查看
1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
比如:
那么:
s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,故不相等。
s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
注意(1):
如果:
结果: s1.equals(s2) //是false
解释:
StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较“地址”的,所以等于false.
注意(2):
对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符
串常量所生成的变量,其中所存放的内存地址是相等的,所以s3==s4是true(即使没有s3=s4这样一个赋值语句)
(2)对于非字符串变量来说:
“==”和”equals”方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
比如:
总之:
equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。
== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。
顺便总结下equals方法和instanceof 的区别:
Object 类的 equals() 方法的比较规则为:当参数 obj 引用的对象与当前对象为同一个对象时,就返回true,否则返回false
在JDK中有一些类覆盖了 Object 类的equals()方法,它们的比较规则为:
如果两个对象的类型一致,并且内容一致,则返回true。
这些类包括:java.io.File、java.util.Date、java.lang.String、包装类(如java.lang.Integer和java.lang.Double类)。
如果是自己定义的类的话,可以复写equals()方法,自己定义比较规则
Java语言对equals()的要求如下,这些要求是必须遵循的,以下几点也算是和instance of 的区别:
转自:http://blog.csdn.net/t12x3456/article/details/7341515
“==”比较两个变量本身的值,即两个对象在内存中的首地址。 “equals()”比较字符串中所包含的内容是否相同。
比如:
String s1,s2,s3 = "abc", s4 ="abc" ; s1 = new String("abc"); s2 = new String("abc");
那么:
s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,故不相等。
s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
注意(1):
如果:
StringBuffer s1 = new StringBuffer("a"); StringBuffer s2 = new StringBuffer("a");
结果: s1.equals(s2) //是false
解释:
StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较“地址”的,所以等于false.
注意(2):
对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符
串常量所生成的变量,其中所存放的内存地址是相等的,所以s3==s4是true(即使没有s3=s4这样一个赋值语句)
(2)对于非字符串变量来说:
“==”和”equals”方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
比如:
class A { A obj1 = new A(); A obj2 = new A(); } 那么:obj1==obj2是false obj1.equals(obj2)是false 但是如加上这样一句:obj1=obj2; 那么 obj1==obj2 是true obj1.equals(obj2) 是true
总之:
equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。
== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。
顺便总结下equals方法和instanceof 的区别:
instanceof操作符用于判断一个引用类型所引用的对象是否是一个类的实例,对于引用类型变量,Java 编译器只根据变量被先生声明的类去编译。 instanceof 左边操作元被显式声明的类型与右边操作元必须是同种类或者有继承关系,即位于继承树的同一个继承分支上,否则编译出错
Object 类的 equals() 方法的比较规则为:当参数 obj 引用的对象与当前对象为同一个对象时,就返回true,否则返回false
在JDK中有一些类覆盖了 Object 类的equals()方法,它们的比较规则为:
如果两个对象的类型一致,并且内容一致,则返回true。
这些类包括:java.io.File、java.util.Date、java.lang.String、包装类(如java.lang.Integer和java.lang.Double类)。
如果是自己定义的类的话,可以复写equals()方法,自己定义比较规则
Java语言对equals()的要求如下,这些要求是必须遵循的,以下几点也算是和instance of 的区别:
• 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。 • 反射性:x.equals(x)必须返回是“true”。 • 类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。 • 还有一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。 • 任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
转自:http://blog.csdn.net/t12x3456/article/details/7341515
相关文章推荐
- java基础之 “==”和“ equals”以及instanceof的区别
- java基础之 “==”和“ equals”以及instanceof的区别
- java中 “==”和“equals”以及instanceof的区别
- Java基础之hashCode()的作用,以及==、equals()和hashCode()区别
- 【Java基础】equals和==的区别以及Integer(-128~127)值的==和equals比较
- java “==”和“ equals”以及instanceof的区别
- Rhyme/Java getClass()与instanceof的区别以及如何编写一个完美的equals()
- 第2章 Java编程基础——FAQ2.21 ==和equals()都可用于比较两个操作数是否相等, 它们有什么区别吗?
- Java基础面试题:==和equals方法有何区别?
- Java基础知识整理(三)- equals和==的区别
- java零基础知识回顾(for与while的区别,以及for的一般用法)
- Java 学习笔记-基础-"=="和equals()的区别。
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- Java中关于==和equal的区别以及equals()方法重写
- 黑马程序员——JAVA基础之 == 和equals区别
- java基础问题----"=="和equals方法究竟有什么区别
- java instanceof和getClass()的区别以及继承与组合的区别
- 由java ==和equals区别引出的对象以及对象的引用等相关概念。转载
- java中的栈、堆以及equals和==的区别
- Java中关于==和equal的区别 以及equals()方法重写