equals和==的区别

Posted hellomaster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了equals和==的区别相关的知识,希望对你有一定的参考价值。

想起之前面试的一道题,equals和==有什么不同。只记得当时的回答完全糊了。。学习一下。

在说明equals和==的区别前,先简单了解一下JVM中内存分配知识:

JVM中,内存分为:栈内存,堆内存。

二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中。

简单说,就是:值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

了解equals和==的区别:

1.对于==,比较的是值是否相等

  如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等:即两个变量的值是否相等

  如果作用于引用类型的变量,则比较的是所指向的对象的地址:即对于引用型变量表示的是两个变量在栈中存储的地址是否相同,即栈中的内容是否相同

2.对于equals方法:

  所有类从Object类中继承equals方法,Object类的的实现代码如下:

boolean equals(Object o)

return this==o;

  也就是说,如果一个类没有对equals方法进行重写(即没有自己定义的equals方法),那么ta将继承Object类的equals方法,equals本身和==没有区别,对于基本数据都是比较值,对于对象都是比较是否为内存地址;

  其他类在继承Object类之后对equals方法重写了的话(诸如String、Date等类对equals方法进行了重写),则比较的是所指向的对象的内容。

举例:

 

以上是关于equals和==的区别的主要内容,如果未能解决你的问题,请参考以下文章

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

equals和==的区别

[转]Java中==和equals的区别,equals和hashCode的区别

equals和==的区别是啥?

Java里的equals和==的区别是否equals是比较内容,==是比较地址的?

==和equals()的区别