String 的 equals 和 ==

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 时候,实际只分配了同一个内存区域,两个变量指向的都是同一个内存地址。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值