說到字串比較,大家都知道,但你真的知道如何比較才是最正確的嗎?
不知道的人,幾乎都是用以下方法來比較的
String str = nullif (str == null || str.equals("")) {}
這實際上是效率最低的,正確的做法是:
String str = null;if (str == null || str.isEmpty()) {}
但上述方法需要jdk在1.6以上,那麼也可以用:
String str = null;if (str == null || str.length() == 0) {}
另外str.equals("1")與"1".equals(str)不同,前者如果str為null,會報null 指標異常,而後者不會。
上述問題雖然看似簡單,但卻反映出一名程式員的編程素質和態度,在我以前的文章中曾反覆強調,一段好的代碼,不是說實現功能就完了,而是在實現功能的前提下如何能高效、穩定、健全。同樣的業務,你可能要花費1s,別人卻只需0.3s,放大到伺服器上,在高負載的情況下,別人的項目能正常運行,你的就掛了。
無論是怎樣優秀的程式員,也都是從無知到有知,誰都是從菜鳥層級一步步成長來的,但一些人在成長到一定階段後便再也無法成長的原因在於,欠缺思考、永不放棄的堅強毅力和追求理想的心態。
軟體本身代表著自動化、智能化、高效化,軟體是有代碼編寫而來的,因此代碼本身也是具有這些特徵的,一些程式員之所以顯得“苦逼”,日日夜夜寫代碼,實際根本原因在於代碼品質不高,失去了代碼本身的特色,變成了純粹體力話,不斷重複著縫縫補補、複製粘貼。將自己由一個“藝人”變成了“工人”。
所以,要想成為藝術大師,就必須從小做起,一點一滴不斷加深思考,要有不滿足於現狀,最求完美的心態。
以下,我還總結了一些例子,大家可以進一步體會下:
1.
for (int i = 0; i < size() * 2; i++) {}
for (int i = 0, stop = size() * 2; i < stop; i++) {}
2.
if (birds.elementAt(i).isGrower()) ...if (birds.elementAt(i).isPullet()) ...
Bird bird = birds.elementAt(i);if (bird.isGrower()) ...if (bird.isPullet()) ...
3.
TestBean bean = new TestBean();if (bean instanceof TestBean) {}
TestBean bean = new TestBean();if (bean.getClass().equals(TestBean.class)) {}
4. 用switch代替長if-else-if
String s = "";for (int i = 0; i < n; i++) {s += "#" + i;}
StringBuilder sbuf = new StringBuilder();for (int i = 0; i < n; i++) {sbuf.append("#").append(i);}String s = sbuf.toString();
但如果是
String s = "(" + x + ", " + y + ")";
會自動編譯使用StringBuilder.append(""),這樣拼字串是可以的。
5. 實體類的get、set方法,加上final