在java学习中,尤其是String类型和int类型的学习中,“==”和equals()的区别容易混淆,下面通过程序的方法来说明二者的相同和不同:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test = new Test();
test.IntegerTest();
test.StringTest();
}
public void StringTest(){
String str1 = "123";
String str2 = "123";
String str3 = new String("123");
String str4 = new String("123");
//==对非基本类型来说是引用比较
System.out.println("str1 == str2: "+(str1==str2)); //true
System.out.println("str1 == str3: "+(str1==str3)); //false
System.out.println("str3 == str4: "+(str3==str4)); //false
//equals是值比较
System.out.println("str3.equals(str1): "+(str3.equals(str1))); //true
System.out.println("str3.equals(str4): "+(str3.equals(str4))); //true
}
public void IntegerTest(){
int a1 = 3; //int
Integer a2 = new Integer(3); //integer
Integer a3 = new Integer(3); //integer
Integer a4 = 3; //自动装箱成integer 对于 -128~127自动装箱不会每次都new一个integer 所以a4和a5引用相同
Integer a5 = 3;
int b1 = 130;
Integer b2 = new Integer(130);
Integer b3 = new Integer(130);
Integer b4 = 130; //自动装箱成integer 对于 -128~127之外的自动装箱每次都new一个integer 所以a4和a5引用不同
Integer b5 = 130;
//equal()是值比较
System.out.println("equals()测试:");
System.out.println("a2.equals(a1): "+a2.equals(a1)); //true
System.out.println("b2.equals(b1): "+b2.equals(b1)); //true
//== 引用比较
System.out.println("==测试:");
System.out.println("a1==a2: "+(a1==a2)); //true integer和int比较,自动拆箱成int类型 所以对int类型来说,==是值比较
System.out.println("b1==b2: "+(b1==b2)); //true
System.out.println("a2==a3: "+(a2==a3)); //false 都是integer类型,==比较的是引用,所以不同
System.out.println("b2==b3: "+(b2==b3)); //false
System.out.println("a1==a4: "+(a1==a4)); //自动拆箱
System.out.println("b1==b4: "+(b1==b4));
System.out.println("a4==a5: "+(a4==a5)); //true 在-128~127之内
System.out.println("b4==b5: "+(b4==b5)); //false 不在-128~128之内
}
}
输出结果为
equals()测试:
a2.equals(a1): true
b2.equals(b1): true
==测试:
a1==a2: true
b1==b2: true
a2==a3: false
b2==b3: false
a1==a4: true
b1==b4: true
a4==a5: true
b4==b5: false
从以上程序和程序结果可以看出:
“==”:对于基本类型来说,==比较的是值;对于非基本类型来说,比如String和Integer来说,==比较的是引用;尤其需要注意的是integer和int比较的时候,integer会自动拆箱成int类型比较,所以也就是比较的值。
equals():只能对非基本类型使用,比较的是值