不同的程式語言之間的寫作風格迥異,我自己一開始接觸的 Python 撰寫起來比較淺顯易讀,寫作風格也比較寬鬆,沒有太多制式的規定與語法,因此,不同人寫出來的 Python Code 風格差異很大;但接觸 Java 後,第一個感受就是規定特別嚴謹,無論在變數類別、函式定義上都需要適應一下。
Java 相對於 Python 是較為嚴謹的程式語言風格,雖同樣被劃分為強型別 (strongly typed)
的程式語言;但 Java 在資料型態上要求嚴格,偏向不容許有隱性的資料型別轉換,並且 Java 在宣告變數時,需要同時宣告辨識的資料型別,舉例來說:
當要宣告一個變數為整數 a 為 87 時:
a = 87; // Python 可以這麼做
int a = 87; // Java 必須在變數前指定型別
當要宣告一個變數為字串 s 為 "I am String" 時:
s = "I am String"; // Python 可以這麼
Srting s = "I am String"; // Java 必須在變數前指定型別
Java 無法指派型別不同的值給變數,直接指派錯誤型別的值,通常不提供隱性的資料型別轉換
int number = 1;
number = "one";
// java: incompatible types: java.lang.String cannot be converted to int
然而,有些情況是隱性的資料型別轉換,像是在 Java 中當 String 與 int 相加 (+) 時,會自動將輸出轉型成 String。
// 舉例像是打印時加上 String
int a = 100;
System.out.println("value of a: " + a); // Out: value of a: 100
// 在指派值的時候也適用
String b = 10 +"10";
System.out.println(b); // Out: 1010
但需要特別留意,Java 在做運算的時候是由左到右,當遇到 String 與 int 相加時,才會自動將 int 轉換為 String,在之前的 int 相加則不受影響,這裡直接舉例感覺比較好理解:
// 目前已經知道 String 與 int 相加會自動轉型成 String
System.out.println(10 + "10");
// Out: 1010
System.out.println("10" + 10);
// Out: 1010
// 但如果從左到右運算時,未遇到 String 之前,則不會發生自動轉型
System.out.println(10 + 10 + "10");
// Out: 2010
// 並非 101010