轉自 http://www.blogjava.net/hyperjava/articles/241839.html
當一個java算術表達式中包含多個基本類型的值時,整個算術表達式的數據類型將發生自動提升。Java定義如下的自動提升規則:
1. 所有byte型、short型和char型將被提升到int型。
2. 整個算術表達式的數據類型自動提升到與表達式中最高等級操作數同樣的類型。操作數的等級排列如下圖所示,位於箭頭右邊類型的等級高於位於箭頭左邊類型的等級。
下面程序示范了一個典型的錯誤:






上面中的sValue -2表達式的類型將被提升到int類型,這樣就是把右邊的int型值賦給左邊的short型變量,從而引起錯誤。
下面代碼是表達式類型自動提升的正確示例代碼(程序清單同上):










必須指出的,表達式的類型將嚴格保持和表達式中最高等級操作數相同的類型,下面代碼中兩個int整數進行除法運算,即使無法除盡,也將得到一個int結果(程序清單同上):






從上面程序中可以看出,當兩個整數進行除法運算時,如果不能整數,得到結果將是把小數部分截斷取整后的整數。
如果表達式中包含了字符串,則又是另一番情形了:因為把加號(+)放在字符串和基本類型值之間時,這個加號是一個字符串連接運算符,而不是進行加法運算。看如下代碼:




對於第一個表達式"Hello!" + 'a' + 7,先進行"Hello!" + 'a'的運算,將把'a'轉換成字符串,將拼接成字符串Hello!a,接着進行"Hello!a" + 7的運算,這也是一個字符串連接運算,得到結果是Hello!a7。對於第二個表達式,先進行'a' + 7加法運算,其中'a'自動提升到int型,變成a對應的ASCII值:97,從97 + 7將得到104,然后進行104 + "Hello!",104會自動轉換成字符串,將變成兩個字符串的連接運算,從而得到104Hello!。
——————————————————
PS.基礎最重要!