equals 与 ==

1.==

对于基本数据类型的比较,比较两者的值。

对于引用数据类型的比较,比较的却是引用(内存地址)。

2.equals

equals是object类中的方法,他比较的是对象的引用,可以理解为值,因此对于重写了了equals方法的比较的是他们的值。

如果没有重写equals方法则比较的是对象的引用。

	Student s1 = new Student("a");
	Student s2 = new Student("a");
	s3 = s2;

	s1 == s2;
	s2 == s3;
	s1.equals(s2);
	s2.equals(s3);
	s1 == s2返回的是false.
s2 == s3返回的是true.
s1,s2是new出来的Student的两个对象,在栈空间中会有s1,s2两个对象引用,分别指向堆空间中的对象。当用==比较时,比的

引用,因此返回false,s2与s3是同一个对象的引用,因此返回true.

而equals比较的是对象

	s1.equals(s2)如果Student类重写了equals方法,返回的为true,没有重写equals方法,返回的为false.
	s2.equals(s3)返回true
String str1 = "java";

String str2 = "java";

String Str3 = new String( "java");

String Str4 = new String("java");

String类型重写了equals方法,因此”equals“比较的是字符串是否一致,而”==“比较的还是字符串的引用。
	但是为什么str1 == str2 返回true,因为常量池的特点。字符串常量不能重复出现,也就是说,有多个常量时,编译器先会去常量池查找该常量是否已经存在,如果不存在,则在创建一个新的字符常量,因此str1,str2指向的是常量池中同一个字符常量,str1,str2中的引用是同一个引用。
	Str3.equals(Str4)返回true.对象的值一样。
		
	Integer i1 = 2;
	Integer i2 = 2;
	System.out.println(i1 == i2);	//返回true
	System.out.println(i1.equals(i2));//返回true
		
	BigDecimal b1= new BigDecimal(4.00);
	BigDecimal b2 = new BigDecimal(4.0);
	System.out.println(b1.equals(b2)); //返回ture
	System.out.println(b1 == b2);	//返回false
		
	包装类中BigDecimal 是个特例,由于其精度,产生的结果或有所不同






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值