简单明了理解java中的“==”和“equals”的区别

来源:互联网 发布:网络作家收入100排行榜 编辑:程序博客网 时间:2024/06/05 19:41

在java中,首先我们理解基本数据类型和引用数据类型。

所谓基本数据类型,就是数据的值直接存储在内存的栈空间,不存在“引用”的概念,有8种基本数据类型,byte(1个字节),boolean(1个字节),char(2个字节,在C语言中是1个字节),short(2个字节),int(4个字节),floar(4个字节),double(8个字节),long(8个字节)。

所谓引用数据类型,就是都继承java的根父类,object类,引用对象的首地址存储在内存中栈空间,而对象的值存储在内存的堆空间。

关于“==”的理解

在8中基本数据类型中,比较的数据的值是否相等,如下图


而在引用数据类型中,比较的是内存中首地址是否相等,由于new出来的对象在堆上开辟了两个独立的空间,地址也当然是不同的,所以返回false。


关于“equals”的理解

在java中,equals本质上是一个返回布尔值的方法,如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:

boolean equals(Object o){

return this==o;

}

利用equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址。