Java中==和equals的比较

经实际验证,有如下结论:

1. 对于基本类型(只能用==)
==           比较值

2. 对于基本类型的封装类(Boolean ,Integer,Double,Long,Float
==           比较地址
equals    比较值

3. 对于类对象
==           比较地址
equals    比较值

4. 对于String
==           比较地址
equals    比较值


验证用代码如下:

import java.util.ArrayList;

public class TestEquals {

    public static void main(String[] args) {
 // To validate basic data types
 int intA = 1;
 int intB = 1;
 System.out.println("intA == intB is " + (intA == intB));
 
 // To validate wrapper classes
 Integer integerA = new Integer(1);
 Integer integerB = new Integer(1);
 Integer integerC = integerA;
 System.out.println("------------------------------");
 System.out.println("integerA == integerB is " + (integerA == integerB));
 System.out.println("integerA.equals(integerB) is " + (integerA.equals(integerB)));
 System.out.println("integerA == integerC is " + (integerA == integerC));
 System.out.println("integerA.equals(integerC) is " + (integerA.equals(integerC)));
 
 // To validate ordinary classes
 ArrayList<Integer> arrayListA = new ArrayList<Integer>();
 arrayListA.add(integerA);
 ArrayList<Integer> arrayListB = new ArrayList<Integer>();
 arrayListB.add(integerA);
 ArrayList<Integer> arrayListC = arrayListA;
 System.out.println("------------------------------");
 System.out.println("arrayListA == arrayListB is " + (arrayListA == arrayListB));
 System.out.println("arrayListA.equals(arrayListB) is " + (arrayListA.equals(arrayListB)));
 System.out.println("arrayListA == arrayListC is " + (arrayListA == arrayListC));
 System.out.println("arrayListA.equals(arrayListC) is " + (arrayListA.equals(arrayListC)));

 // To validate String class
 String stringA = new String("123");
 String stringB = new String("123");
 String stringC = stringA;
 System.out.println("------------------------------");
 System.out.println("stringA == stringB is " + (stringA == stringB));
 System.out.println("stringA.equals(stringB) is " + (stringA.equals(stringB)));
 System.out.println("stringA == stringC is " + (stringA == stringC));
 System.out.println("stringA.equals(stringC) is " + (stringA.equals(stringC)));
    }
}

执行结果为:

intA == intB is true
------------------------------
integerA == integerB is false
integerA.equals(integerB) is true
integerA == integerC is true
integerA.equals(integerC) is true
------------------------------
arrayListA == arrayListB is false
arrayListA.equals(arrayListB) is true
arrayListA == arrayListC is true
arrayListA.equals(arrayListC) is true
------------------------------
stringA == stringB is false
stringA.equals(stringB) is true
stringA == stringC is true
stringA.equals(stringC) is true

原文地址:https://www.cnblogs.com/jancco/p/2488989.html