==与equals

==与equals

==

  • 基本数据类型比较的是值是否相等

  • 引用类型比较地址是否相同

double a=10.0;
int b=10;
System.out.println(a==b);
//结果为true
String str1="Jim";//str1与str2都是引用类型,若为同一值,则str1与str2都指向常量池里的同一个地址
String str2="Jim";
System.out.println(str1==str2);//比较地址发现地址相同返回true

String aq=new String();//构造方法式新创建一个堆中的对象,并赋给aq其地址值
System.out.println(aq==str1);//结果为false

equals

  • Object类的equals比较的是地址是否相同
  • String类中重写了equals方法比较两个字符串内容是否相同
    在这里插入图片描述

此图中,对object类的equals进行了重写

String name1="Tim";
String name2="Jack";
System.out.println(name1.equals(name2));//结果为false,因为字符串不同

现在,我们来仔细分析这段被String类重写的equals方法

  1. 首先第976行anObject为上转型对象,因为传进来的是一个字符串即String类,将他赋值给了Object类,所以其为一个上转型对象
  2. 第977和第998 ,979这3行用一个if(==)语句来判断地址是否相同,若地址相同,则内容必定相同返回true;结束
  3. 若不相同进行第980行,判断anObject是不是String类,如果不是一个String类,return false;
  4. 如果是则继续,第981行将被anObject进行下转型以便于调用子类新增的方法value。
  5. 第982行value指的是调用equals方法String对象每个字符组成的char类型数组,然后通 过 .length()方法获取字符个数。
  6. 983行==号右边为另一个字符串的字符个数,对两者比较,若个数不同,则字符串一定不同,return false,否则进行while循环逐字符判断是否相同。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值