java之 “==”,“ equals”,"instanceof"的区别 |
您所在的位置:网站首页 › equals在java中的用法不等于 › java之 “==”,“ equals”,"instanceof"的区别 |
(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。 “==”比较两个变量本身的值,即两个对象在内存中的首地址。 “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关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。 举个例子: public interface IObject { } public class Foo implements IObject{ } public class Test extends Foo{ } public class MultiStateTest { public static void main(String args[]){ test(); } public static void test(){ IObject f=new Test(); if(f instanceof java.lang.Object)System.out.println("true"); if(f instanceof Foo)System.out.println("true"); if(f instanceof Test)System.out.println("true"); if(f instanceof IObject)System.out.println("true"); }} 输出结果: true true true true 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”。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |