Java 面试常客:equals() 与 ==
Posted Fzshuai_Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 面试常客:equals() 与 ==相关的知识,希望对你有一定的参考价值。
写在前面,在写这边博客前查了很多资料,只是站在巨人的肩膀上,自己总结了一些自己常用的知识,想给自己和他人一个正确的参考,本人能力有限,有错误的地方请批评指正,不吝赐教。
一、Java 的 8 大基本类型
- bit: Binary digit(二进制数位)的缩写,意为“位”或“比特”,是计算机运算的基础,计算机中最小的存储单元,不能够单独寻址 ;一般用0和1表示 。
- byte: 字节,是计算机文件大小的基本计算单位,最小的可寻址存储单元;
类型 | 占用存储空间 | 数值范围 | 备注 |
---|---|---|---|
byte | 1字节 | -128~127 | 所有基本数据类型使用前必须初始化 |
short | 2字节 | -215~215-1 | |
int | 4字节 | -231~231-1 | |
long | 8字节 | -263~263-1 | |
float | 4字节 | -3.403E38~3.403E38 | |
double | 8字节 | -1.798E308~1.798E308 | |
char | 2字节 | 0~216-1 | |
boolean | true或者false |
二、JVM 变量存放的地址
在方法中声明的变量,即局部变量,每当程序启动时,JVM 会为该程序 main() 方法在虚拟机栈中申请一块内存建立一个方法栈,其方法中声明的变量就放在该栈中,不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存;对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被分配在堆上。当方法执行结束 JVM 会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束。
在类中声明的变量,即成员变量,当声明的是基本数据类型时,变量及其变量名存放在堆中;引用类型时,其声明的变量存放一个内存地址,该地址指向所引用的对象,引用的变量名和对应的对象仍然放在相应的堆中;成员变量可细分为静态成员变量和普通成员变量,静态成员变量类属于类,类可以直接访问,存储在方法区中;普通成员变量属于类对象,必须声明对象之后,通过对象才能访问,存储在堆中。
三、== 与 equals
==:关系操作符,计算两个操作数之间的关系,返回一个boolean类型的结果。
equals:Object 类的一个方法,用来比较两个对象之间的关系,返回一个boolean类型的结果。
== 比较的是内存地址,equals() 在未重写前和 == 作用一样,在重写后一般判断内存地址指向的对象的内容是否相同。在 Object 类中的 equals() 也是返回 == 进行比较的,所有很多情况下需要类对象重写 equals() 方法。
对于基本类型来说,== 比较的是值是否相等;对于引用类型来说,== 比较的是两个引用是否指向同⼀个对象地址(两者在堆内存地址是否指向同⼀个地方)。
String 类型往往被认为是基本数据类型,开发中使用频率超高,在刚学 Java 时,我以为它也是 Java 的八大数据类型之一,有一次还室友理论了一番,铁定它就是基本数据类型,现在想想,哈哈,可笑。String 类重写了 equals(),逐个比较两个 String 对象的每个字符是否相同。String 类型是特殊的,有个字符串常量池的概念。
以上是关于Java 面试常客:equals() 与 ==的主要内容,如果未能解决你的问题,请参考以下文章