栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-01String类型的比较,==和equals()

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-01String类型的比较,==和equals()

这里写自定义目录标题
  • 今天再次栽到了引用类型的比较,==和equals()的问题

今天再次栽到了引用类型的比较,==和equals()的问题

先说用法:引用类型的比较用equals()判断,基本类型的比较用 ==。

== 比较的是地址,
如果equals()没有被重写,则同样是比较地址;
如果equals()有被重写,则会先比较地址,再比较内容,地址或内容相同都会返回true。

举例说明:

String str = new String(“test”);
如果常量池中没有"test”,会在堆和常量池中均创建"test",且str指向堆中的"test";
如果常量池中已存在"test",则只在堆中创建,str指向堆中的"test"。

String str = “test”;
如果常量池中没有"test”,会常量池中均创建"test";
如果常量池中已存在"test",则指向常量池中的"test"。

List.add(“London”); 和 String str = “test”; 情况相同,只要没有new,就是常量池。

下面是经历:

下面这段代码是我在IDEA中写的,注意输入部分对String的创建方式,导致destCity()中使用==进行字符串比较,获得了正确的答案,虽然答案正确,但不该这样使用。

class Test {
    public String destCity(List> paths) {
        String ans = "";
        for (int i = 0; i < paths.size(); i++) {
            ans = paths.get(i).get(1);
            boolean flag = false;
            for (int j = 0; j < paths.size(); j++) {
                //if (ans.equals(paths.get(j).get(0))) {
                if (ans == paths.get(j).get(0)) {
                    flag = false;
                    break;
                }
                //if (ans.equals(paths.get(j).get(0))) {
                if (ans != paths.get(j).get(0)) {
                    flag = true;
                }
            }
            int a = 1 / 0;
            if (flag) {
                return ans;
            }

        }

        return ans;

    }
    

    public static void main(String[] args) {
        List> paths = new ArrayList<>();
        List stringList1 = new ArrayList<>();
        List stringList2 = new ArrayList<>();
        List stringList3 = new ArrayList<>();
        stringList1.add("London");
        stringList2.add("Lima");
        stringList3.add("Lima");
        stringList3.add("Sao Paulo");
        paths.add(stringList1);
        paths.add(stringList2);
        paths.add(stringList3);

        Test test = new Test();
        System.out.println(test.destCity(paths));


    }

}

这段代码的方法体用在LeetCode每日一题【1436. 旅行终点站】中的时候,得到了错误的答案(应该是和那一题中没有显式写出的String的创建有关),将==改为equals()后通过。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号