关于“==”和equals()的比较

在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():只能对非基本类型使用,比较的是值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值