码迷,mamicode.com
首页 > 其他好文 > 详细

equals和==的区别

时间:2019-08-13 13:21:28      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:类型   调用   相等   举例   bsp   new   str   his   内存地址   

想起之前面试的一道题,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和==的区别

标签:类型   调用   相等   举例   bsp   new   str   his   内存地址   

原文地址:https://www.cnblogs.com/hellomaster/p/11345161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!