为什么我并未重写equals方法,equals和==的结果就已经不一样了?

packagecom.imut.ch03;publicclassStringTest{publicstaticvoidmain(String[]args){Strings... package com.imut.ch03;

public class StringTest{
public static void main(String[] args){
String s1 = new String("abc");
String s2 = new String("abc");

System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
}

}

我并未重写equals方法,两个的结果不是应该一样么?可是编译运行之后却是不一样的?
展开
 我来答
绝杀狂龙
2021-03-02 · TA获得超过1913个赞
知道小有建树答主
回答量:1310
采纳率:78%
帮助的人:597万
展开全部

一张简图讲解

当使用==为false就是因为创建的是两个对象,在堆内存中是两个不一样的地址,对于引用类型,==只是比较引用地址是否一样,这里显然0x3344不等于0x5566

但通过equals的方法,因为String重写过了。代码如下:

    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;

    }


比较的是内容是否一样。一样所以是ture


但如果String s1 = "abc";

            String s2 = "abc";

使用==结果就是true,因为引用的地址是一样的,内容必然一样。

深圳市海测科技有限公司
2018-06-11 广告
AUMA,德国经济展览和博览会委员会。德国经济展览和博览会委员会在联邦经济与技术部和消费者保护、营养与农业部协助下,为德国官方参与国外展会计划做筹划准备工作。在该计划范围内,德国政府为德国企业去国外展会共同参展提供可观的经济支持,同时也为德... 点击进入详情页
本回答由深圳市海测科技有限公司提供
超可爱ING
2021-03-02 · TA获得超过1245个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:186万
展开全部
String属于包装类型,==比较的是引用地址。(基本类型的数据比较时,==才是比较值)
这里很显然,两个new String一定是两个对象,引用地址不一样。==返回的结果自然是false。
equals才是用来比较字符串的值的,返回true。它就是为了解决==无法直接比较String值的情况。
你可以再去看一下String中equals的源代码。它是先使用==比较,如果不相等,就去比较字符串长短,再比较两个字符串的每个字符是否相等。也就是在比较字符串的内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丿打酱油的
2021-03-01 · TA获得超过256个赞
知道小有建树答主
回答量:1134
采纳率:78%
帮助的人:146万
展开全部
这样要区分两种比较方式的区别,双等号是比较值,equals是比较对象地址,一般基本类型用双等号,比如int,字符串这种引用类型用equals。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
软件开发领路人
2021-03-01 · 解答软件开发新人的问题烦恼
软件开发领路人
采纳数:711 获赞数:408

向TA提问 私信TA
展开全部
你好,很高兴回答你的问题。
这里调用的是String类重写的equals方法。
如果有帮助到你,请点击采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式