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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

记得刚接触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

你可能感兴趣的:(谈一谈Java中String类"=="和"equials"的区别)