本文由資深 C# 開發者視角出發,總結轉型 Java 過程中遇到的核心差異與踩坑經驗,不評價語言優劣,僅作技術對比參考。
for 雙 Tab 生成循環)、重構強大(VS2015+ Roslyn/ReSharper)。List<int> 與 List<Int32> 為同一類型,編譯器為每個值類型生成專用代碼,支持 Remove/RemoveAt 區分。ArrayList<Integer>.remove(1) 識別為刪除索引 1 元素,若要刪除值 1 必須強轉 remove((Object)1)。int 是 System.Int32 別名,均為值類型(棧上),List<int> 直接存值,無裝箱開銷。int 基本類型,Integer 引用類型(堆上)。泛型只能用 Integer,自動裝箱/拆箱帶來性能損耗與空指針風險。struct 值類型(棧上)、按值傳遞,適合輕量數據載體(如坐標、日期)。struct,只能用 class(引用傳遞)或內部類模擬,所有對象均在堆上分配,增加 GC 壓力。enum 需 JDK 1.5+,低版本項目編譯失敗(曾遇學生項目默認低版本導致)。// 字面量
String A = "Hello"; String B = "Hello"; // Java & C# 均 true(常量池/駐留池)
// new 對象
String A = new String("Hello");
String B = new String("Hello");
// Java: A==B 為 false(比較引用),需用 A.equals(B)
// C#: A==B 為 true(字符串駐留機制自動合併相同內容)
Java 必須用 equals() 比較內容,== 比較引用;C# 重載 == 比較值。
轉型關鍵在於思維切換:接受類型擦除、習慣包裝類、掌握 equals/hashCode 契約、善用 IDEA 智能補全彌補語法冗長。語言只是工具,工程思維才通用。