您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 字面值 >

equals()和==到底有什么区别啊?

发布时间:2019-07-16 08:36 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。

  由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写。

  但是没有对equals进行重写的类就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非在此类中重写equals。

  1、自反性:对任意引用值X,x.equals(x)的返回值一定为true;

  4、一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变;

  == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

  3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:

  equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自g.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

  以String s=abce;形式赋值在java中叫直接量,它是在常量池中而不是象new一样放在压缩堆中。这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为abcd的对象。

  如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个“abcd”,下一次如果有Strings1=abcd;又会将s1指向“abcd”这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象。

  而String s=new String(abcd”);和其它任何对象一样.每调用一次就产生一个对象,只要它们调用。

  也可以这么理解:String str=hello”;先在内存中找是不是有“hello”这个对象,如果有,就让str指向那个“hello”。

  ==是判断两个变量或实例是不是指向同一个内存空间。

  equals是判断两个变量或实例所指向的内存空间的值是不是相同。

  4、一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次、第三次、第n次调用也均为true,前提条件是没有修改x也没有修改y;

  java中所有类的父类是Object类,在Object中,已经定义了一个equals()方法,但是这个默认的equals()方法实际上也只是测试两个变量引用是否指向同一对象(即与 == 功能一样)。所以它并不一定能得到你所期望的效果。

  通常我们需要自己将定义的类(就是上面的TestEqual)中的equals()进行重写。像Integer封装类就已经重写了Object中的equals()方法,直接可以拿来比较引用类型c和d指向的对象的值。

  展开全部凡是比较基本类型只能用==,比较结果你看到的字面值相等就会相等,什么叫基本类型? byte,short,int,long,char,float,double这几种就是基本类型.基本类型不是对象所以不存在用equals比较.

  凡是比较引用类型(对象),==比较的是两个引用是不是指向同一个内存地址,equals比较的是两个引用的字面值是不是相同,什么叫字面值?你能看到的值就是字面值,比如:String s=abc; abc就是字面值.

  基本类型的包装类型是对象类型,所以除非两个相同字面值的引用指向同一内存地址,值才会相等,比如:

  这样用等号或equals比较都会得出true,记住一点,凡是两个引用都用了new去初始化,那==比较的结果都只会是false,互相之间有了赋值,比较结果就为true.

  2018-10-11展开全部在基本数据类型中用的都是“==”比较的是两个对象的内容(包括数值和数据类型)

  在引用数据类型中==和“equals”比较的都是两个对象的地址值

http://halsoankan.com/zimianzhi/315.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有