1. 程式人生 > >淺析List中Integer型別比較的錯誤

淺析List中Integer型別比較的錯誤

相信很多人都會有想用List集合存int資料的時候(或許是用於後續遍歷),初始我的第一反應是下圖,

經驗證會報錯,雖要將int存入,但初始化時需要初始為Integer型別。正確的初始化如下


實際上是由於我的軟體構造實驗課lab1中一個困擾我近三個小時的程式bug,讓我想到了開這樣一個測試程式說明這個問題


如上圖(即我的測試程式),按邏輯List中存入了同一個int型別的資料,必定是相等的,程式也沒有報錯,於是開始build and run,結果確非常出人意料


由於Integer是類(具體為物件),實際上相同int型別資料a進入List中時,已經被具體為兩個物件,物件之間判等於應該是object.equels(object),“==”自然是不對的,作為java的初學者,我覺得很有可能遇到這個不容易被察覺的問題。

於是我改寫了判等於的部分如下:


果然輸出了正確結果

希望對大家有所啟發(這個狡詐的小bug,在我的一個實驗程式中整整花了幾個小時才發現並解決!!!!!)

為此專門測試驗證

相關推薦

淺析ListInteger型別比較錯誤

相信很多人都會有想用List集合存int資料的時候(或許是用於後續遍歷),初始我的第一反應是下圖,經驗證會報錯,雖要將int存入,但初始化時需要初始為Integer型別。正確的初始化如下實際上是由於我的軟體構造實驗課lab1中一個困擾我近三個小時的程式bug,讓我想到了開這樣

JavaInteger型別的整數值的大小比較

       如果比較兩個數值相等的Integer型別的整數,我們可能會發現,用“==”比較(首先你必須明確“==”比較的是地址),有的時候返回true,而有的時候,返回false。比如: Integer i = 128; Integer j = 128; System

Long、Integer型別比較是否相等

一、Long型別 1. Long aLong=(long) 128; Long bLong=(long) 128; System.out.println(aLong==bLong); 結果:false =========================== 2. Long aLong=(long

laravel 資料庫遷移integer型別是無法指定長度.

laravel資料庫遷移中integer型別是無法指定長度的,很多小夥伴對integer型別傳遞第二個引數後會發現遷移報以下錯誤 Syntax error or access violation: 1075 Incorrect table definit

Javadouble型別比較大小或相等的方法

在Java中int型別資料的大小比較可以使用雙等號,double型別則不能使用雙等號來比較大小,如果使用的話得到的結果將永遠是不相等,即使兩者的精度是相同的也不可以。下面介紹兩種比較double資料是否相等的方法。 第一種方法:轉換成字串 如果要比較的兩個double資料的

JavaInteger直接比較大小

Integer a = -1250; Integer b = -1250; System.out.println(a == b); Integer c = -125; Integer d = -125

mysql資料庫datetime型別比較大小

在mysql中    datetime型別可以比較大小 如圖,可以找出最小的日期的值 2013-08-04 10:27:16  日期列的型別為datetime  當日期列的型別為varchar時  一樣可以比較大小

javaInteger數值比較

java中的Interger數值比較 首先,分別出“==”和“equal”的差別:“==”是對應的地址相等和內容相等,“equal”是對應的內容想等; 然後,Integer物件在進行計算比較是會進行自動拆箱,也就是說Integer a = 10; int b = 10; 判

javaLong型別比較大小和long型別比較大小

今天遇到這樣一個問題,我用 "=="來比較兩個Long型別的資料,明明數值都相等,可是結果就是false 兩個 Long 型別

JavaInteger和int比較大小出現的錯誤

最好 裏的 pan 轉換 als 範圍 urn 返回 錯誤 Java在某一處維護著一個常量池,(我記得)在小於128的範圍內,直接用 1 Integer i = 100; 2 int j = 100; 3 return i == j;//true 這裏返回的是true.

C++ 淺析 STL list 容器

時也 sta 雙向鏈表 class span 所有 rom 實現 -s list - 擅長插入刪除的鏈表 鏈表對於數組來說就是相反的存在。 數組本身是沒有動態增長能力的(程序中也必須又一次開辟內存來實現), 而鏈表強悍的就是動態增長和刪除的能力。 但對於數組強悍的隨機

List的Contains方法內部其實是用對象的equals方法做比較,所以如果比較兩個類就重寫類的equals方法即可

mage image inf post lis con bsp 兩個類 png List中的Contains方法內部其實是用對象的equals方法做比較,所以如果比較兩個類就重寫類的equals方法即可

javaString字串轉化成list<Integer>格式

最近開發中遇到問題,同事在傳給我ids時拼接為String字串格式,轉化成List,網上的轉化大致為: String[] strs = {"1","3","12","33"}; List<String> sList = Arrays.asList(strs); 而我要的是轉化後

mysqlString型別日期比較

    1、資料庫中欄位createtime型別為String,格式為:06-08-2018 10:50:24;     2、以createtime做條件做時間範圍內的查詢操作:    將String轉為date: <

Javaint和integer比較

Java中,數值型的建立和字串有類似的地方,Integer是Java為了使用物件的屬性和方法給int準備的型別。字串 String s = “bag”; 這樣建立會在常量池中查詢 bag,沒有的話就新建,並不會在堆裡新建。 同樣地,Integer i = 11;也不會在堆裡

JS不同型別比較的規律 (比較運算子)

JS 不同資料型別的比較 是個頭疼事情,那有沒有規律可循,讓記憶和理解起來更加容易呢, console.log(1 ==  "1") //true  好的,我先把規則告訴大家,然後大家理解後再開始練習。看看效果是不是很顯著; 不同資料型別間的比較,規

淺析python的可變型別和不可變型別

資料型別 可變型別物件:列表(list),字典(dict) 不可變型別物件:數字(int,bool,float、、、),字串(string),元組(tuple) 意義 可變與不可變指的是,在對物件本

JavaScript關係運算 “ == ” 各種資料型別比較的各種情況

學的還沒有那麼深,有錯誤或者我的理解有問題的話還請告訴我,謝謝 1、一般情況下,將兩邊儘可能都轉為number型別資料,再進行比較,而不是轉為Boolean型 console.log(true==2);   // false   如果兩邊都轉為Boolean型再比較

python迴圈刪除list和dict型別注意事項

列表和字典在迴圈操作(增刪)時,其長度會改變 # 刪除 li = [11, 22, 33, 44, 'rock']中索引為單數的元素 # 方法一 del li[1::2] print(li) # [11, 33, 'rock'] # 方法二 new_li = [] for index in ra

關於oracle利用sysdate比較的方法 必須先轉換型別

在oracle中用來儲存日期型別的資料叫做date 我們可以利用 SELECT SYSDATE FROM DUAL   即可呼叫oracle中本身自帶的一個獲取當前系統時間的一個函式   不過SYSDATE本身並不是date資料型別,它是oracle系統所自帶