java string equals源码_java中的==与equals()分析与源码分析

1.关于==

首先要知道==用于匹配内存单元上的内容,其实就是一个数字,计算机内部也只有数字,而在java语言中,当==匹配时,就是比对两个单元内存的内容是否一样。

如果是原始类型,byte,boolean,short,char,int,long,float,double,就是直接比较他们的值。

如果是引用,比较的就是引用的值,引用的值可以被认为是对象的逻辑地址,如果两个引用发生==操作,就是比较两个相应的对象的地址值是否一样,换句话说,如果两个引用保存的是同一个对象,则返回true,否则返回false。

2.关于equals()

equals方法,首先是在Object中被定义的,它的定义中就是使用==方式来匹配的,也就是说,如果不去重写equals方法,并且对应的类其父类列表中都没有重写过equals方法,那么默认的equals操作就是对比对象的地址。

equals方法之所以存在,是希望子类去重写这个方法,实现对比值的功能,类似的,String就自己实现了该方法。

JDK1.7的equals()

public boolean equals(Object anObject){

if(this==anObject){

return true;

}

if(anObject instanceof String){

String anotherString =(String)anObject;

int n=value.length;

if(n==anotherString.value.length){

char v1[]=value;

char v2[]=anotherString .value;

int i=0;

while(n-- !=0){

if(v1[i] !=v2[i])

return false;

i++

}

return true;

}

}

return false;

}

注:不论是1.6还是1.7,String.equals()的代码逻辑大致如下:

(1)判定传入的对象和当前对象是否为同一个对象,如果是就直接返回true.

(2) 判定传入的类型值是否为String,若不是则返回false;

(3)判定传入的String与当前的String的床都是否一致,若不一致就返回false;

(4)循环对比两个字符串的char[]数组,逐个对比字符是否一致,若存在不一致的情况,则直接返回false;

(5)循环结束都没有找到不匹配的,所以最后返回true;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值