寫程式碼時,編譯器比你聰明
學姐起的標題,搶先用一下。
在《Effective Java》第51條:“當心字串連線的效能”一文中介紹的原則是:不要使用字串連線操作符來合併多個字串,除非效能無關緊要。相反,應該使用StringBuilder的append方法。
所以我一直以為應該儘量使用StringBuilder。直到今天review學姐的程式碼後才發現並非總是如此。
直接上測試程式碼(儲存成Demo.java):
public class Demo{
public static void main(String[] args) {
String a = "a" + "b" + "c";
StringBuilder sb = new StringBuilder();
String b = sb.append("d").append("e").append("f").toString();
System.out.println(a);
System.out.println(b);
return;
}
}
編譯後再檢視位元組碼(編譯方法:javac Demo.java,反編譯的方法:javap -c Demo):
可以看出,編譯器直接合並了"a" + "b" + "c"變成“abc”,而StringBuilder還需要呼叫3次才行。
雖然沒有實際驗證舊版本的編譯器,但我猜想,早期的編譯器並沒有這麼智慧,所以Effective Java裡面的建議在當時是正確的。但隨著編譯器的進化,書上發現的那些陷阱和缺陷已經被修正,反而書上的有些內容變得過時和錯誤了。
結論:
- 編譯器的目的就是讓程式設計變得越來越容易,因為做編譯器的那些人比一般的程式設計師更聰明。
- 技術書籍過時太快,或者說技術本身過時就很快。
- 人生苦短,還是趕快用Python吧。
相關文章
- Sublime 編寫編譯 swift程式碼編譯Swift
- 你解決的問題比你編寫的程式碼更重要!
- 如何讓Java編譯器幫你寫程式碼Java編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 實時程式碼編輯器
- 【譯】說服Kotlin編譯器程式碼安全Kotlin編譯
- DWR幫助說明-伺服器端程式的編寫伺服器
- 使用C編譯器編寫shellcode編譯
- 編譯FFMPEG原始碼的指令碼編寫案例編譯原始碼指令碼
- 編寫一個簡易計時器程式(edu)
- 程式設計裡的“小聰明”(1)程式設計
- 【翻譯】編寫程式碼註釋的最佳實踐
- Flutter編譯時生成程式碼之 code_builderFlutter編譯UI
- 關於支援OPenACC的編譯器說明編譯
- 高通程式碼編譯編譯
- Android編譯期插樁,讓程式自己寫程式碼(一)Android編譯
- Android編譯期插樁,讓程式自己寫程式碼(二)Android編譯
- 使用 Async / Await 來編寫簡明的非同步程式碼AI非同步
- 【譯】使用 Python 編寫虛擬機器直譯器Python虛擬機
- 實時顯示iOS編寫UI程式碼效果iOSUI
- MySQL 5.7.9原始碼編譯安裝說明MySql原始碼編譯
- javascript編寫一個簡單的編譯器JavaScript編譯
- 數棧產品中的程式碼編譯器編譯
- bugku——聰明的小羊(柵欄密碼)密碼
- 你的團隊比你更聰明:為什麼自組織產品團隊會更好地工作
- [譯] 編寫整潔 CSS 程式碼的黃金法則CSS
- Linux Kernel 程式碼藝術——編譯時斷言Linux編譯
- 減少C++程式碼編譯時間的方法C++編譯
- 使用瀏覽器命令列編寫JavaScript程式碼瀏覽器命令列JavaScript
- 寫給小白的開源編譯器編譯
- 精讀《手寫SQL編譯器-回溯》SQL編譯
- JavaScript 編寫的迷你 Lisp 直譯器JavaScriptLisp
- 編寫 SQL 程式碼時常犯的九個錯誤SQL
- RHEL 7特性說明(七):編譯程式及工具編譯
- 程式碼編寫提示配置
- 如何編寫MapReduce程式碼
- 編寫更好程式碼的6個提示【已翻譯100%】
- Vue3原始碼分析——編譯模組和編譯器Vue原始碼編譯