String型別數值與Long型別數值比較是否相等
1.情景再現:
有個兩表,假如分別叫表A、表B,它們都有一個欄位存放著使用者id。
現在用beanA和beanB來分別來對應表A和表B。
然後就判斷這連個id欄位是否相等,相等則進一步處理。
2.bug出現了
比較兩個id是否相等的虛擬碼如下:
if (beadA.getId().eqauls(beanB.getId())) {
//TODO
}
結果沒有任何相等的,但資料庫中資料是有相等的,那麼bug就出現。
問題是出在型別上。beanA中id的型別是String,beanB中id的型別是Long,所以以上程式碼中if條件永遠都是false。
我這個問題還是比較隱蔽的,比較兩個值是否相等嘛,但是沒想到在bean中型別是不一樣的,而且這裡也沒有任何提示。
以下為String類equals方法的原始碼:
傳入的是一個Object,
3.解決方法:
if (beadA.getId().eqauls(beanB.getId() + "" )) {
//TODO
}
相關推薦
String型別數值與Long型別數值比較是否相等
1.情景再現: 有個兩表,假如分別叫表A、表B,它們都有一個欄位存放著使用者id。 現在用beanA和beanB來分別來對應表A和表B。 然後就判斷這連個id欄位是否相等,相等則進一步處理。 2.bug出現了 比較兩個id是否相等的虛擬碼如下: if (beadA
Matlab 將數值與字元型別組合一起輸出到excel中
將字元型別a與陣列型別b組合在一起,輸出為csv檔案。 1、將表tem1與表tem2中的15id連在一起。 2、當tem2中15id與tem1中相同時,將tem1的第16列賦為1; 3、輸出csv。 clc; clear; [a,b,c] = xlsread('F:\tem1.csv
JavaScript數值與字串型別轉換的三種函式
字串->數值 Number(argument1:AnyType) parseInt(argument1:String,argument2:Int) parseFloat(argument1:String) Number() Number()函
Go string和interface{}與其他型別互轉
使用過go語言的都知道go語言對於型別的控制有多麼的嚴格,因此所有的型別都應該通過顯示的轉換來完成,下面就給出常見的string和其他常見型別的轉換以及interface{}型別轉換為其他型別,具體的底層實現可以參考strconv庫中的實現
Java中二進位制與long型別轉換
java中int型佔據32位,long型佔據64位,那麼當定義一個long型的二進位制數時,如果不滿64位,前面會自動補0,所以,哪怕定義的二進位制數是32位的,首位也不是符號位了。 public class TestLong { public static voi
常用API(一)——String、StringBuffer與基本型別包裝類
String 關於String這個特殊類,我到現在都還沒搞明白,我覺得可能主要是由於沒有搞懂JVM的記憶體結構引起的,但還是對其進行以下記錄。 字串是一個特殊的物件。 字串一旦初始化就不可以被改變。 String str = "abcd"; 以上這句
java中String型別資料與Date型別資料相互轉換
//實體類 public class Bean { public int id; public String name; public Date date; public int getId() { return id; } public void se
自動型別轉換與強制型別轉換
java基本資料型別之間存在自動型別轉換與強制型別轉換兩種轉換方法。 型別從低到高:byte->char->short->int->long->float->double,如果
強型別語言與弱型別語
簡單的說:強型別語言編譯質量更好,執行速度更快,但程式碼臃腫、死板。弱型別語言開發更敏捷,自由度更高,但效率略低。 強型別 比較嚴謹, 比較嚴格, 在保證資料的有效性來說, 會比較好一些, 也就比較穩定 但對初學者不大友善. 弱型別 易用, 上手快 但也經常出現一些問
Java 位元組陣列型別(byte[])與int型別互轉
程式碼如下: public class CommonUtils { //高位在前,低位在後 public static byte[] int2bytes(int num){ byte[] result = new b
c語言格式輸出剖析——用%d輸出float型別資料與int型別%f格式輸出
C語言學習實踐 摘要 本文將從C語言變數的本質,不同型別變數在記憶體中的儲存方式,型別強制轉換,格式輸出4個方面闡述C語言初學階段的一些問題。 關鍵詞:記憶體儲存,型別強制轉換,反彙編 1. 變數 變數來源於數學,是計算機語言中能儲存計算結果或能表示值抽象
快學Scala學習筆記及習題解答(17-18型別引數與高階型別)
本文Scala使用的版本是2.11.8 第17章 型別引數 17.1 泛型 泛型類 class Pair[T, S](val first: T, val second: S) // 例項化 val p = new Pair(42, "Str
Object型別轉換為long型別
資料庫為bigint型別 查詢結果為Object型別 將Object轉換成long型別 BigInteger bigint=(BigInteger)mapS.get("chart_dataid"); Long chart_dataid=bigint.longValue
java自動型別轉換與強制型別轉換
自動型別轉換就是自發的進行,你可以從輸出的結果看出,外表是看不出來的。我們知道資料型別有很多種,大小也不一樣,就像水桶似的,有1升的,2升的,4升的,自動型別轉換就相當於把小的水桶裡面的水裝到大的裡面去。比如 int a = 10; double b = a;
兩個long型別的數值相除問題
問題描述:兩個long型別的數值相除,結果會自動取整。當兩個數相除結果是零點幾的時候,如何避免結果自動取整為0 解決: 在做除的操作時,被除數先乘以1.0再去除以除數,這樣得到的結果就是小數而不會取整
ulua lua中的時間戳實現中出現的數值型別問題,long錯誤不能識別的解決方案
ulua中的時間戳 第一種c#方法: /// <summary> /// Gets the time. cgq“yeg°ãó{ /// <
如何將比Long型別更大數值字串轉化為整數
前幾天,需要做一個number型別的資料庫主鍵唯一處理,而且有38位。於是再想使用什麼規則控制唯一性。最後決定採用時間,年月日時分秒毫秒,再加隨機數。 問題產生了,如何將一個38位的數字字串轉化為整
Java 裡使用 long 型別的資料一定要在數值後面加上 “L”
我在工作中寫好的一個日期轉換工具類: public class DateUtil { private static Logger logger = Logger.getLogger(Dat
C++中string型別與char*型別的字串比較剖析
C++中的string字串可以直接進行比較,事實上strcmp()的兩個引數是char*型別的,也就是說是比較C字串的(即char陣列),於是就不能用於比較string型別了 int strcmp( const char *string1, const char *str
python 型別轉換與數值操作
1. 型別轉換 1.函式 描述 2.int(x [,base ]) 將x轉換為一個整數 3.long(x [,base ]) 將x轉換為一個長整數 4.float(x )