equals 方法和 ==的比较

为啥 String类下面equals如果内容一样的可以返回true?

1.当父类的需求满足不了子类的需求

2.String类重写了Object类的equals

equals:

public boolean equals(Object obj)方法 是objct类中的方法

1.比较内存地址 如果内存地址是一样 肯定一样

2.然后比较内容 内容一样返回true

String中的 equals方法是被重写过的,因为 Object的 equals方法是比较的对象的内存地址,而 String的 equals方法比较的是对象的值。

当创建 String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String对象。

==:

【1】如果比较的对象是基本数据类型,则比较数值是否相等;

【2】如果比较的是引用数据类型,则比较的是对象的内存地址是否相等。

public boolean equals(Object obj) {  //object obj = student2     // object obj = new Student  向上转型
			if (this==obj) {
				return true;   //先判断内存地址是否相等,在Java中对象的内存地址相同,说明指向的数据是同一个,内容也就相等
			}
			//如果内存地址不相等,那么继续往下走,判断内容是否相等
		//此时obj为 student2 如果它不是Student父类的子类或Student的实例,说明obj的内容与Student无关,就直接返回false
		//如果相关下面进行内容比较
		if (obj instanceof Student) {     
			Student student =(Student)obj;
			//向下转型  Student的引用指向student2的实例
			return this.name.equals(student.name)&&this.age==student.age;
													//此时this和student的age属性都是int类型 == 号的作用不再是判断内存地址是否相等,而是变成了判断数值是否相等
			//此时this是studeng其数据类型是string数据类型,调用equals方法是已经重写过的方法,先判断内存地址,内存地址不一样会继续判断内容,内容为true返回是true
			
		}
		return false;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值