Java基本操作符與數據類型

13 變量類型 :運算時,補碼運算,運算器不知道符號位,自動溢出

     long 64bit 9964L(l)

     double 64bit 123.13D(d) 或e3

     float   1123.f

     double/0=Infinite或-Infinite

     char unicode 16位

     都是有符號的。

     >>不認識符號位

     >>>符號位不動

     instanceof  對象或其子類的對象

     break 可以帶標號,一次跳出多層循環;

     強制類型轉換和自動類型轉換 ,

     

 無論在C/C++還是在Java,強制類型轉換已經不是陌生的概念了。但是要想全面掌握Java中類型轉換的要點可不那麼簡單,本文將帶領大家一同瞭解有關Java類型轉換的所有要點。

數值類型的類型轉換

    衆所周知,Java有兩種數據類型:基本數據類型與引用數據類型;Java又有兩種基本的類型轉換原則:拓寬轉換原則(widening conversion)與縮小轉換原則(narrowing conversion)。
拓寬轉換與縮小轉換隻適用於基本數據類型中的數值類型。數據值類型按照範圍從小到大排列爲:

byte   short   int   long   float   double (long轉float會失真)

當目標類型的範圍比源類型的範圍大時遵循拓寬轉換原則,不必強制轉換。如:

byte  b = 10;
short s = b;

反之則遵循縮小轉換原則,即
當目標類型的範圍比源類型的範圍小時遵循縮小轉換原則,必須強制轉換。如:

short s = 10;
byte  b = (byte)s;

需要注意的是拓寬轉換原則不丟失數據。如:


縮小轉換原則在超出目標類型的取值範圍時會導致數據丟失。如:

上例輸出結果爲:

轉換前:257
轉換後:1

字符類型與數值類型之間的轉換

基本數據類型char等同於一個無符號短整型,範圍從0x0000到0xFFFF。

從其它數值類型轉換到char類型時,必須進行強制轉換。如:

將char類型轉換成其它數值類型時,除byte、short必須強制轉換外,int long float double均不必強制轉換。如:


引用類型的類型轉換

引用類型的賦值常見於具有繼承關係的兩種類型的轉換。如下面的例子:

當目標類型與源類型存在父子關係時,不必強制轉換。

上例是一個典型的多態。但如果要從父類引用轉換成子類引用,即

當源類型與目標類型存在父子關係時,必須進行強制轉換。如:

當然,如果子類引用指向的是一個父類對象,轉換時會拋出ClassCastException異常。(真實的父對象不能轉化爲子對象)

進一步,如果要從一個引用類型轉換成不相關的另一個引用類型,即

當源類型與目標類型不存在父子關係時,轉換無法進行,編譯時會出現錯誤。

數值類型與包裝類之間的轉換

JDK1.5之後引入了自動裝箱的概念。也就是說
將一個基本數據類型轉換到對應的引用類型時,不必強制轉換。如:

int i = 10;
Integer iObj = i;反之亦然。即

將一個基本數據類型的引用類型轉換到基本數據類型時,不必強制轉換。

Integer iObj = new Integer(10);
int i = iObj;//運行時可能異常,因爲實際是i=iObj.value(),iObj爲null時,會異常。

表達式中的類型提升原則

在算術運算和位運算中,數值類型的數據按以下原則進行類型提升:

byte、short和char型自動轉成int型;如:

如果有一個操作數是long型,則整個表達式的結果用long型表示;如:

位運算不能操作float及double類型,因此在算術運算中
如果有一個操作數是float型,則整個表達式的結果用float型表示;如:

如果有一個操作數是double型,則整個表達式的結果用double型表示。如:

特殊的類型提升

Java表達式中有一種特殊的表達式,? 表達式。? 表達式是一個特殊的賦值表達式,它會按照算術運算中的類型提升原則將 : 兩端的操作數提升至統一的類型。如:

byte b = 10;
short s = 20;
int i = (b == 10) ? b : s;

需要指出的是
如果 : 兩端有一個操作數是引用類型,則整個表達式的結果用Object型表示。

int i = 10;
String str = "Hello";
Object obj = (i == 10) ? i : str;  // 在這裏變量i進行了自動裝箱操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章