( 转)关于==和equals()

本文解析了Java中栈与堆的概念及作用,详细阐述了基本数据类型与对象引用类型的存储方式,并深入探讨了==运算符与equals()方法的区别及其在不同场景下的应用。
在java中内存分为 “栈”和“堆”(Stack and Heap) 基本数据类型存储在 "栈"中
对象引用类型实际存储在 "堆"中,在“栈”中只是保留引用内存的地址值,就好像知道你家门牌号码就可以找到你家。

在Java中利用"=="比较变量时候,系统使用变量在stack(栈)中所存的值来作为对比的依据,基本数据类型(int float double

boolean)在stack中所存的值就是其內容值,而引用类型在stack中所存放的值是本身所指向Heap中对象的地址值,而不是原先所設定的值。

Java.lang包中的Object类有public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。
    ==运算符也进行等值比较。也就是说,对于任何引用值X和Y,当且仅当X和Y指向同一对象时, X==Y返回真。
    当两个分离的对象的内容和类型相配的话,String,Date,File类和所有其它override equals()的包装类(Integer,Double,等等)将返回真。
    例如,String类中的equals()方法返回true,当且仅当参数不为null并且是一个String对象,该对象与调用该方法的String对象具有相同的字符顺序。
String s1=new String(“JDK1.2”);
String s2=new String(“JDK1.2”);
方法s1.equals(s2)返回真,尽管s1和s2指向两个不同的对象。

方法是可以被重载的,按照java语言的本意来说:如果没有重写(override)
新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,
但是java推荐的是使用equals()方法来判断两个对象的内容是否一样.也就是说一般的类的比较使用override的equals()比较的是Heap而不是stack中的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值