Java中 "equals" 和 "==" 用法总结

equals介绍:

Java当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被复写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 

所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。

"=="介绍:

基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。

复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。

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

 

遇到的坑:

类中定义的Long类型的数据直接用 “==“ 比较而不是用equals,注意long才是基本数据类型,Long是包装类。

Java的数据类型分为两种:

1、基本类型:byte(8),short(16),int(32),long(64),float(32),double(64),char(16),boolean(1)

2、对象类型:Byte,Short,Integer,Long,Float,Double,Character,Boolean

上面的对象类型分别是基本类型的包装类,例如Byte是byte的包装类

扩展,Long数据类型的比较方法:

Long l1 = new Long(100);

Long l2 = new Long(200);

if(l1.longValue() < l2.longValue){...}

demo:

1 public class ObjectDemo{

2     public static void main(String[] args) {

3         String s1 = "Hello";

4         String s2 = new String("Hello");

5         s2 = s2.intern();

6         System.out.println(s1 == s2);       //  true

7         System.out.println(s1.equals(s2));  //  true

8     }

9 }

java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc":检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值