java equals和==的区别

java equals和==的区别

也算是一直以来都没有搞清楚的问题,这次认真的看了下代码,搞定这个问题。
初学Java的时候总是喜欢用==来判断两个String是否相等,也闹了很多的错误。
当我们调用==时候,则会比较两个变量的值,如果是 基本类型则可以直接比较,如果是String则会比较他们在内存中的地址,举一个简单的例子

Student student1 = new Student();
Student student2 = new Student();
System.out.println(student1.equals(student2));
System.out.println(student1 == student2);

上面的代码中 输出false false ,我们看一下类中equals的方法

 public boolean equals(Object o) {
        return this == o;
    }

直接返回的是==,也就是说类的equals的本质和==是一致的,比较的仅仅是他们在内存的地址,当 我们new了两个student后,将是不同的地址,所以就会是false。

那么大家也可能看过下面的例子

String a = new String("a");
String b = new String("a");
System.out.println(a == b);
System.out.println(a.equals(b));

为什么输出就是false true ,我们在点击 equals方法进去看一下,会发现

 @Override public boolean equals(Object other) {
        if (other == this) {
          return true;
        }
        if (other instanceof String) {
            String s = (String)other;
            int count = this.count;
            if (s.count != count) {
                return false;
            }
            // TODO: we want to avoid many boundchecks in the loop below
            // for long Strings until we have array equality intrinsic.
            // Bad benchmarks just push .equals without first getting a
            // hashCode hit (unlike real world use in a Hashtable). Filter
            // out these long strings here. When we get the array equality
            // intrinsic then remove this use of hashCode.
            if (hashCode() != s.hashCode()) {
                return false;
            }
            for (int i = 0; i < count; ++i) {
                if (charAt(i) != s.charAt(i)) {
                    return false;
                }
            }
            return true;
        } else {
            return false;
        }
    }

可以看到他会在count和hashcode值相同时候,比较字符串的值是否相同,所以上面的答案就呼之欲出了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值