Java 面试常客:equals() 与 ==

Posted FzshuaiBlog

tags:

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

写在前面,在写这边博客前查了很多资料,只是站在巨人的肩膀上,自己总结了一些自己常用的知识,想给自己和他人一个正确的参考,本人能力有限,有错误的地方请批评指正,不吝赐教。

一、Java 的 8 大基本类型

  • bit: Binary digit(二进制数位)的缩写,意为“位”或“比特”,是计算机运算的基础,计算机中最小的存储单元,不能够单独寻址 ;一般用0和1表示 。
  • byte: 字节,是计算机文件大小的基本计算单位,最小的可寻址存储单元;

类型占用存储空间数值范围备注
byte1字节-128~127所有基本数据类型使用前必须初始化
short2字节-215~215-1
int4字节-231~231-1
long8字节-263~263-1
float4字节-3.403E38~3.403E38
double8字节-1.798E308~1.798E308
char2字节0~216-1
booleantrue或者false

二、JVM 变量存放的地址


​ 在方法中声明的变量,即局部变量,每当程序启动时,JVM 会为该程序 main() 方法在虚拟机栈中申请一块内存建立一个方法栈,其方法中声明的变量就放在该栈中,不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存;对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被分配在堆上。当方法执行结束 JVM 会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束。

​ 在类中声明的变量,即成员变量,当声明的是基本数据类型时,变量及其变量名存放在堆中;引用类型时,其声明的变量存放一个内存地址,该地址指向所引用的对象,引用的变量名和对应的对象仍然放在相应的堆中;成员变量可细分为静态成员变量和普通成员变量,静态成员变量类属于类,类可以直接访问,存储在方法区中;普通成员变量属于类对象,必须声明对象之后,通过对象才能访问,存储在堆中。

三、== 与 equals

==:关系操作符,计算两个操作数之间的关系,返回一个boolean类型的结果。

equals:Object 类的一个方法,用来比较两个对象之间的关系,返回一个boolean类型的结果。

​ == 比较的是内存地址,equals() 在未重写前和 == 作用一样,在重写后一般判断内存地址指向的对象的内容是否相同。在 Object 类中的 equals() 也是返回 == 进行比较的,所有很多情况下需要类对象重写 equals() 方法。

​ 对于基本类型来说,== 比较的是值是否相等;对于引用类型来说,== 比较的是两个引用是否指向同⼀个对象地址(两者在堆内存地址是否指向同⼀个地方)。

​ String 类型往往被认为是基本数据类型,开发中使用频率超高,在刚学 Java 时,我以为它也是 Java 的八大数据类型之一,有一次还室友理论了一番,铁定它就是基本数据类型,现在想想,哈哈,可笑。String 类重写了 equals(),逐个比较两个 String 对象的每个字符是否相同。String 类型是特殊的,有个字符串常量池的概念。

以上是关于Java 面试常客:equals() 与 ==的主要内容,如果未能解决你的问题,请参考以下文章

Java 面试常客:equals() 与 ==

Java面试求职之==与equals()差别

Java面试题 equals()与"=="的区别?

Java面试题:hashcode与equals

Java面试题QA

Java面试题:hashCode() 和 equals()