1. 程式人生 > 實用技巧 >equals與== 2020.12.15

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;