关于String类型中==和equals的区别。

 

"=="操作符的作用

1、用于基本数据类型的比较,比较的是值。

2、用于比较对象,判断对象的引用是否指向堆内存的同一块地址。

equals的作用

 用于比较两个对象的内容是否相同

代码如下:

 1 /*
 2      * String de ==和equals
 3      */
 4     @Test
 5     public void aa5(){
 6         
 7         String s1="abc";//创建一个对象“abc”
 8         String s2="abc";//当String缓存池中存在这个指定的对象“abc”,将不会再创建新的String对象。反之,则创建新的对象
 9         String s3=new String("abc");
10         String s4=new String("abc");
11         System.out.print("s1==s2:");
12         System.out.println(s1==s2);//返回true
13         System.out.print("s3==s4:");
14         System.out.println(s3==s4);//返回false,s3和s4是两个不同的对象
15         System.out.println(s1.equals(s2));//返回true
16         System.out.println(s3.equals(s4));//返回true
17         System.out.println(s1.equals(s4));//返回true
18     }

 equals的底层原理说明

String.class下的equals方法

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;//(private final char value[];//这是String类中的value属性声明,是一个char类型的数组)
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

Object.calss下的equals方法

public boolean equals(Object obj) {
        return (this == obj);
    }
public class equalsTest {
    public static void main(String[] args) {
        String a3=new String("33");
        A a1=new A(22);
        A a2=new A(22);
        System.out.println(a1.equals(a2));//true,使用的equals方法是重写之后的equals方法
        B b1=new B(22);
        B b2=new B(22);
        System.out.println(b1.equals(b2));//false,使用的equals是原来的
    }
}
class A{
    private int age;
    public A(){};
    public A(int age){
        this.age=age;
    }
       //重写equals方法
    public boolean equals(Object obj){
        A other=(A)obj;
        return this.age==other.age;
    }
}
class B{
    private int age;
    public B(){};
    public B(int age){
        this.age=age;
    }

    
}

 

原文地址:https://www.cnblogs.com/jincheng81/p/9027922.html