早上做開發時想到的一個問題,當時的需求場景是串列中100個item(item中包括下載任務id、下載任務url等變數)元素,每個item都要更加下載進度實時重繪,下載回呼介面進度更新方法中的形參有三個:int型別的下載任務id、String型別的下載任務的鏈接,還有個int型別的下載百分比。現有邏輯是在進度更新方法中根據String型別的url查找到item,再重繪串列。另一種方法我也試了,就是更加ing型別的任務id來查找到item,再重繪。
那我現在疑惑一下,這兩種不同資料型別不同的比對方法,哪種的效率高一些?
uj5u.com熱心網友回復:
可以自測一下,int型別的比較比String型別的比較快那么一丟uj5u.com熱心網友回復:
int肯定比equal快。String的equal方法是hash之后比較hash值,本質上是一個CPU計算型運算,如果string特別大,計算程序會比較慢,1M的String應該在10ms左右。但是int的==方法,就是記憶體間的資料大小比較,是一個加減乘除的簡單計算。uj5u.com熱心網友回復:
==假設==的操作開銷,時間都為10。
你再去看equals方法內部,他有更多的陳述句,最后必定包括至少一次的==。所以equals方法開銷時間都大于10。
包含關系
uj5u.com熱心網友回復:
String.equals應該是先比較長度,然后再從頭一位一位比較是否相同的
uj5u.com熱心網友回復:
不過Int的==肯定是比String.equals快的,因為String.equals至少也是有一次length(int型別)的==的
uj5u.com熱心網友回復:
氣死我了,上才藝! public static void main(String[] args) throws Exception{
int a = 5;
int b = 6;
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000_0000; i++) {
if (a == b) {
}
}
long useTime = System.currentTimeMillis() - startTime;
System.out.println("useTime = " + useTime);
}經測驗,運行時間為2 ~ 3毫秒。然后把變數型別改變一下,如下:
String a = "5";
String b = "6";
其它代碼不變,運行時間為3 ~ 5毫秒。看到了吧,就是用==來比較String,它都比==比較int要慢,當然了==來比較String其實比較的是記憶體地址(也是int型別),但是記憶體地址一般是一個比較大的int值,所以cpu計算起來就慢一些。如果你用equals來比較String,那效率肯定更慢了。你可以像我這樣寫個Demo測驗一下運行時間就知道了。
uj5u.com熱心網友回復:
如果我的回答解決了你的問題,麻煩結貼給點積分,謝謝^_^轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72997.html
標籤:Java SE
上一篇:struts.xml報錯
