效能優化 代替equals

2021-03-31 08:56:59 字數 1449 閱讀 8627

很多人一定覺得這個題目老土,稍微有點基礎的人都覺得比較弱智,沒有什麼好討論的,因為這個問題討論的太多了。不過你既然進來了,不妨看完,就算給個面子吧,幾分鐘而已,可能你會有點啟發!

很久沒有寫東西了,現在大部分人也不會關心程式的效率問題了,因為cpu總是閒著,記憶體總是空著。

很多人都覺得對於基本型別用==,對於引用型別用equals(),為什麼呢?

對於引用型別如果可以用==代替equals(),可以大大提高效率。不用說了,我們不關心效率!但是如果能提高

100倍甚至1000倍你也不關心,那就不用往下看了。

只舉兩例:

1.如何判斷乙個class是否指定的型別

如果你想到instanceof,說明你還是不錯的,不過這裡不能用instanceof,這裡就判斷是否string為例吧。

給定乙個class c,判斷是否為string類的class

方法1:

boolean b=c.getname().equals(string.class.getname());

方法2:

boolean b=(c==string.class);

第一種方法太爛了,第二種方法至少快100倍,甚至1000倍或者10000倍,因為用==幾乎不用時間

我們知道字串的比較是乙個字元乙個字元比較。

結論:對於可以使用==的比較,不要使用equals();一般單例類的例項可以使用==,比如列舉類。

2.對於字串用==代替equals()?

既然==效率這麼高,而且string是乙個不可變的,可不可以用==代替equals呢?

string s1="hello";

string s2="hello";

boolean eq=(s1==s2);

這裡當然可以用==代替,因為他們是同乙個物件,但是如果用了new的話就不行了.

對於字串從不用new生成是不是就可以用==代替equals呢?

還是不行,這裡舉乙個例子吧:

string s1="hello";

stringbuffer sb=new stringbuffer(s1);

string s2=sb.tostring();

boolean b=(s1==s2);//false

結論:特定場合可以使用==代替,因為大部分情況下不能用==,所以除非效能太重要了,否則不用

==代替equals,因為你這樣寫別人可能就看不懂了。

3.真的那麼好用嗎?

看到==的效率這麼高,就一直想用,我就變通一下:

boolean eq(string s1,string s2)

能想到這樣使用真的不簡單,但是這樣不但沒有提高效率,反而大大降低了效率.

因為intern本身就比equals來的慢,你這裡還兩次!

不過這種用法我在class類的**裡看到過。

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...

效能優化 電量優化

使用battery historian來監測電量的情況,battery historian時google的乙個開源專案 具體安裝過程參見 當出現下列畫面,說明已經開啟 其開啟成功以後,訪問網頁如下所示 說明 這裡使用的是一台國外的vps伺服器,原本是想在本地虛擬機器實驗的,一直連線超時,就換成了vp...

效能優化 儲存優化

android系統提供4中基本的資料儲存方式,分別是sharedpreference 檔案儲存 sqlite資料庫 contentprovider。sharedpreference sharedpreference是一種簡單便捷的儲存方式,常用來儲存一些簡單配置資訊。儲存路徑 sharedprefe...