equals方法深入解析

写在前面

  • 最初接触java的时候,都会有涉及equals==的区别,最经典的案例就是用String类型的数据作类比。最常见的说法就是:equals比较的是值,==比较的是引用地址。
  • 首先这种说法是错误的,也有人认为这种说法是不完全正确的(至少对于String这个类来说这种说法是没问题的)。
  • 之所以说这种说法是错误的,是因为本人真的觉得这个总结实在是误人子弟。

1、equals==

1.1、==

首先我们要先清楚java中有哪些数据类型,及他们的存储位置。

  • java中的数据类型:
    • (1)基本数据类型:整数类型(byte,short,int,long)、浮点类型(float,double)、字符型(char)、布尔型(Boolean)
    • (2)引用数据类型:类(class)、接口(interface)、数组
  • 存储位置:
    • 基础数据类型:存储在常量池中(JDK8之后去除了元方法区,改为存在堆内存中的元空间)
    • 引用数据类型:存储于堆中。

在java中,==比较的内容也跟数据所处的位置相关:

  • (1)基础数据类型:比较的是值。
  • (2)引用数据类型:比较的是是对象的引用地址。

为什么会这样分?我们就需要来看一个例子。

  • 示例代码:
    public class StringTest {
    	String str1 = "字符串";
    	String str2 = "字符串";			
    }
    
    public class StringTest1 {
    String str3 = new String("字符串");
    String str4 = new String("字符串");
    }
    

首先来看一上述两段代码有什么不同?一个是直接赋值,一个是给对象赋值。我们通过javac把上述两段代码编译为.class文件,再用javap方法来反编译看一下:

  • StringTest对应的反编译文件
    public StringTest();
        descriptor: ()V
        flags: ACC_PUBLIC
        Code:
          stack=2,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值