JAVA中==和equals方法的区别,简单易懂

来源:互联网 发布:法医秦明 知乎 编辑:程序博客网 时间:2024/05/21 21:49

基本类型大家肯定知道是用==比较,这里只说引用类型

1:==一般用来判断基本类型的比较,如果是引用类型,则判断它们是否指向堆内存的同一个地址(注意这里是地址)

2:一个方法,一般用来判断逻辑相同,判断指向的堆内存的对象的值是否相同 (注意这里是值不是 地址),如果没有重写这个方法的话,默认继承的是object的方法,和==一样,一般需要重写这个方法(String类自动重写了此方法)


  public boolean equals(Object obj) {

        return (this == obj);

    } 
String   a=new String("aaa");

String   b=new String("aaa");

System.out.println(a==b);//false

System.out.println(a.equals(b));//true


上面的a和b因为new了两个对象,这两个对象虽然都指向了data区(也叫常量池,静态变量和常量都放在这)的同一个值"aaa",内容是一样,但是New出来的这两个对象的地址不同滴,所以为false,如果改为下面的方式就为true了:

String s1 = "aaa"; 

String s12= "aaa"; 
System.out.println(s1==s2);//true

这里的s1和s2直接指向常量池的数据,可看作数据和地址都是一样的!


比如new了个双胞胎a大毛和b二毛,外观啥的100%相似:

a==b吗?肯定不一样啊,它们是两个人啊,大毛怎么可能是二毛呢。

a.eqals(b)吗(此处重写eqals方法)?当然对了,他们长的一样啊。


==就像是 is(判断地址)

equals就像是like(判断值)


以下是String类的API 介绍

equals

public boolean equals(Object anObject)
将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为true

覆盖:
Object 中的equals
参数:
anObject - 与此 String 进行比较的对象。
返回:
如果给定对象表示String 与此 String 相等,则返回true;否则返回 false
另请参见:
compareTo(String), equalsIgnoreCase(String)

0 0
原创粉丝点击