java中equals和==的区别

本文深入解析Java中的基本数据类型和引用数据类型,包括它们的内存分配、存储方式及比较原则。并通过实例说明基本类型和引用类型在使用时的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中有两种数据类型:

基本数据类型:

byte(内存中占8bit)short(内存中占16bit)int(内存中占20bit)long(占64bit)float(占32bit)double(占64bit)char(占16bit)boolean(占1bit)  只有long和double占2个局部变量(Slot,一个Slot占32位)

基本数据类型都是直接存储在内存中的内存栈上,数据本身的值就是存储在栈空间里面的

比较基本类型的时候,== 比较的直接是他们两个的值

 

引用数据类型:

String

引用类型继承Object类,按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储

当用(==)进行比较的时候,比较的是他们在内存中的存放地址(堆内存地址)。

注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。

区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念

例子:

 public static void main(String[] args) {
        String a="abc";
        String b="abc";
        System.out.println(a==b);//true
        String c = "abc";
        String d = new String("abc");
        System.out.println(c == d);//false
        String e = new String("abc");
        System.out.println(d == e);//false
        String f = e;
        System.out.println(f == e);//true
    }

总结:

==的作用:

         基本类型:比较的就是值是否相同
               引用类型:比较的就是地址值是否相同

           equals 的作用:
              引用类型:默认情况下,比较的是地址值,但是这样没意义,一般这个方法被重写了,实现值的比较。
注:不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同

 

 

参考博客:https://www.cnblogs.com/smyhvae/p/3929585.html

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值