谈一谈Java中String类"=="和"equials"的区别

记得刚接触Java时,String类的"=="和"equals"方法很是让我头疼,然后只知道"=="比较的是空间地址,而"equals"比较的是内容。趁着最近找工作,重新翻看Java核心技术和Java基础知识,加深一下理解。
首先,我们必须知道Java的内存机制,或者说Java的内存可以分为两类:一种是栈内存,一种是堆内存。值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
String 类源代码中对于equals方法的重写
String类的equals()

 

//如果是同一个对象        if (this == anObject)        {            return true;        }        //如果传递进来的参数是String类的实例        if (anObject instanceof String)        {            String anotherString = (String)anObject;            int n = count;//字符串长度            if (n == anotherString.count) //如果长度相等就进行比较            {                char v1[] = value;//取每一个位置的字符                char v2[] = anotherString.value;                int i = offset;                int j = anotherString.offset;                while (n-- != 0) //对于每一位置逐一比较                {                    if (v1[i++] != v2[j++])                        return false;                 }                return true;            }        }        return false;




转载于:https://my.oschina.net/Charlie1/blog/132123

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值