String 的 equals 和 ==

来源:互联网 发布:mlily床垫怎么样知乎 编辑:程序博客网 时间:2024/06/02 19:28

String 在 Java 中并非9种基本类型之一

判断2个 Object 是否相等时通常用 == 或者 equals 来判断,== 判断的是内存地址,equals 判断的是内部的值

String 的 equals 实现时先判断是不是 ==,如果是同一个地址的 Object 直接返回相等,如果地址不同时,会先判断被比较的对象是否是一个String,如果不是直接返回不等,如果是就判断字符串长度,不同长度的直接返回不等,然后逐位比较字符,出现不等的返回不等,全部相等返回相等。

String 的 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;}


实例:

package com.zsoft.test;public class StringEqualsTest {public static void main(String[] args) {String a = "abcde";String b = "abcde";String c = "abcd";System.out.println(a.hashCode());System.out.println(b.hashCode());System.out.println(c.hashCode());System.out.println(a.equals(b));System.out.println(a == b);System.out.println(a.equals(c));System.out.println(a == c);}}

输出:

92599395

92599395

2987074

true

true

false

false



此例还同时证明了初始化相同内容的 String 时候,实际只分配了同一个内存区域,两个变量指向的都是同一个内存地址。




0 0