java基础之“==“ 与 ”equals ”的区别

java基础之“==“ 与 ”equals ”的区别

前言:
作为Java的基础知识,我相信可能还有许多朋友对于 "==""equals " 之间的关系还不是很明白,今天就总结一下两者的区别:
知识点一:“==”与 equals 比较的内容是什么?
 1. " == " 比较的是两个对象的内存地址
 2. "equals"方法:
         a.Object类中的equals方法内部实现依然是使用 "==",也就是说比较的是内存地址
         b.java中除了Object类之外的所有类都直接或者间接继承Object类,也就是说,每一个类都能够重写Object类的equals方法,
        那么这个时候,比较的是什么就有你自己而定了。比如String类重写equals方法,比较的是内存地址和字面值;
知识点二:这里附上 Object类的equals方法和String类复写equals方法的源码

Object中的equals方法源码: —jdk1.7

    public boolean equals(Object obj) {
        return (this == obj); //内存地址相同返回true
    }

String类中重写equals方法源码: —jdk1.7

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;//先比较内存地址相同返回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;
    }
知识点三:“ == ”案例(以String字符串位例)
public class Test3 {
    public static void main(String[] args) {

        String str1 = "中国";
        String str2 = "中国";
        String str3 = new String("中国");
        String str4 = str3.intern();



        System.out.println(str1 == str2);// true
        System.out.println(str1 == str3);//false
        System.out.println(str1 == str4);//true

        System.out.println();
    }
}
知识点四:案例解释

这里写图片描述

这里写图片描述

知识点五:“equals”案例 ,以String字符串为例
        String a1 = "123456";
        String a2 = new String("123456");
        String a3 = "123456";
        String a4 = a2.intern();



        System.out.println("a1 equals a2 : "+(a1.equals(a2) ));//a1 equals a2 : true
        System.out.println("a1 equals a3 :"+(a1.equals(a3)));//a1 equals a3 :true
        System.out.println("a1 equals a4 :"+(a1.equals(a4) ));//a1 equals a4 :true

总结:

1.从结果上来看都是true,可以得到String类重写的equals方法生效,确实是比较了字符串的字面值
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值