equals与== 2020.12.15

  说实话,没有老师讲课自习真的是无聊。拿着老师给的高铁购票系统自己今天下午终于打完了,才发现bug一大堆哦,李哥真不靠谱。

全静态方法和变量在控制台做出一个系统是真的又麻烦又复杂,主要查问题起来太麻烦了,一个劲的翻啊。

第一个bug是不能添加同一个车次的车辆这个功能写了没实现,我使用syso将判断语句中查询到的车次与输入的车次一个一个打印到了控制台,明明值一样,判断居然是false,我烦恼了半天,然后怀疑是==的锅,果不其然,使用equals判断是ture,然后去百度了一下,二者还是有区别的,主要问题出在输入的值使用了接受从控制台输入得来的,是引用类型String,String id = sc.next();我一开始以为与输入的值,就是使用sc.next();与其指向的堆有关系,因为sc是引用的,然后从Eason-S的一篇文章“==与equals的区别”(https://www.cnblogs.com/Eason-S/p/5524837.html)了解到==与其两边的数据类型有关,首先是两边类型必须相同,如果是基本数据类型即如果两边是阿拉伯数字就是比较其值是否相等,而如果是String的话,则是比较两个对象的地址即两个是否为一个对象;equals比较的是内容是否相等,但equals本身调用的object其实与==相同,但我们在使用时某些类已经对其进行了覆盖,所以equals才会不同,但我不知道如何实验才能不让equals进行覆盖。。。。。。不过这个情况暂时用不到。String a="abc.."这是唯一一种不用使用new就可以直接创建对象的途径,这个还是第一次知道,又涨知识了,这种形式赋值叫直接量,不会与new一样放在堆里,而是在JVM中扣留着,说实话这部分下面没看太懂,还有equals重新覆盖的代码,看不太懂,原文网址在上面有了,有机会在看吧。    

String id=sc.next();
            System.out.print("请输入始发站:");
            String begin=sc.next();
            System.out.print("请输入发车时间:");
            String begindate=sc.next();
            System.out.print("请输入耗时/小时:");
            String takeuptime=sc.next();
            System.out.print("请输入终点站:");
            String enddate=sc.next();
            System.out.print("请输入价格:");
            String price=sc.next();
            for(int i=0;i<trainNumberDB.length;i++){
                if(trainNumberDB[i][0].equals(id)){
                    System.out.println("车次已存在,请重新添加车次信息");
                    indertHig();
                    break;
原文地址:https://www.cnblogs.com/zzdbk/p/14140686.html