Java跟C#的差異

去年我從原本寫C#改來寫Java
今年聽說有朋友新工作要從Java去寫C#
我突然很想數一數C#跟Java到底有哪些不一樣
以下開始數
  1. Nullable Integer
    1. Java:  Interger class本身是 nullable的,可以存Null, int 則不是 nullable.
    2. C#: int 只是 Integer class 的縮寫,兩者等義,都不是nullable的。要用Nullable<Integer> 或是 int? 才是nullable
  2. String class的大小寫
    1. Java 是 String
    2. C# 是 string
  3. 一個 method 有多個 output ?
    1. Java 不支援,一個method只能傳回一個return value
    2. C# 可以透過call by reference的 out 跟ref 來支援 一個method傳回多個value
  4. 定義 method 會丟出來的 Exception
    1. Java: 如果不是RuntimeException,則必須定義 method會丟出來的exception (throw exceptions)
    2. C# 不需定義
  5. Primitive types
    1. Java: 所有的 integer types 預設都是 signed
    2. C#: 有 signed 也有 unsigned
  6. base class constructor
    1. Java subclass() { super() …}
    2. C# subclass() : base()
  7. package v.s. namespace
    1. Java package
    2. C# namespace
  8. 命名規則 (Naming convention)
    1. Java
      1. method 建議採用  lowerCamelCase  ex. runFast()
      2. class 建議採用 UpperCamelCase ex. HumanBeing
      3. local variable 建議採用 lowerCamelCase ex. int frameWidth
      4. constant 建議採用全部 upper cases ex. MAX_CONNECTION_COUNT
      5. 參考資料: https://www.javatpoint.com/java-naming-conventions
    2. C#
      1. method, class 建議採用 UpperCamelCase for
      2. MS官網把UpperCamelCase也叫做 PascalCasing
      3. parameter 跟local variable 建議採用 loweCamelCase
      4. 不建議使用匈牙利命名法 (Hungarian notation). Ex. bBusy, chInitial, cApples  (我也覺得匈牙利命名法不太適合現在IDE強大的年代)
      5. 參考資料:  https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/capitalization-conventions
  9. Sealed v.s. Final
    1. Java final
    2. C# sealed
  10. Safe type casting only in C#
    1. Java 沒有類似的
    2. C# 有 “as" 如果cast type 失敗會變default 值,不會有exception
      1. Ex. Object o = new string();  string s = o as string; // s will be NULL when casting failed without error.
  11. Delegate method only in C#
    1. Java 沒有類似的
    2. C# 的delegate就是把method當作參數的概念
  12. CompletableFuture only in Java
    1. Java 有CompletionStage/CompletableFuture 可以把future 串起來成一個chain,一個CompletionStage的output是另一個CompletionStage的input,並維持簡潔的語法
    2. C# 有 await/async 可以操作future,但是沒有CompletionStage那種串成chain的簡潔的語法
我就數到這裡
大概還有些我沒數到的吧
不過12是個很吉利的數字
就停在這裡好了
各有各的好囉

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s