JAVA基本數據類型轉換

boolean類型不可以轉換成其他的數據類型;

● 整形、字符型、浮點型的數據在混合運算中相互轉換,轉換時遵循如下規則:

    ■ 容量小的類型自動轉換成容量大的數據類型;數據類型按容量大小排序如下:         byteshort,charàintàlongàfloatàdouble

        要注意的是byteshort,char之間不會相互轉換,他們三者在計算時首先轉換 int類型。byte的取值範圍是-128~127

n  容量大的數據類型轉換爲容量小的數據類型時,要加上強制轉換符,但可能造成精

度降低或者溢出;使用時候要格外注意。

n  有多種類型的數據混合運算時,系統首先自動地將所有類型轉換成容量最大的那個

數據類型,然後再進行計算。

實數常量(如:1.2)默認爲double(故:float f = 22.2;是錯誤的)

整數類型(如:123)默認爲int

可以直接把一個int類型的數賦值給一個byte,short,char類型的變量,但是不能超過其對應的範圍(直接截取最後的一個字節)。

要理解容量大的數強制轉換成容量小的數的實質是截取後面的字節(如:int類型轉換成double類型的時候,是直接取int類型中4個字節的最後一個字節),但是double轉換成float類型,由於double中存在小數點的情況,因此直接加強制轉換時轉換不過來的(infinity)。

long類型8個字節,int類型4個字節,short類型2個字節,byte類型1個字節。

Float類型4個字節,double類型8個字節。

l  典型問題:

(1)  double d = 1e200;//打印顯示Infinity;

(2)  float f = 11.1//錯誤;默認爲double類型,應該修改爲float f = 11.1f;

(3)public class TestDataKind {

            public static void main(String[] args) {

               byte b = 44;

               char c = 'b';

               short s = 1024;

               int i = 40000;

               long l = 12463l;

               float f = 35.67f;

               double d = 3.1234d;

       /*

        * (f * b)時,b自動提升爲float類型 (l*f)時,l自動提升爲float類型 (i/c)

*時,c自動提升爲int類型

        * (d*s)時,s自動提升爲double類型 再相加時,中間結果都變爲了double類型。

        * 這裏result只能聲明爲double類型,result聲明爲其他類型會出錯,除非進行

*強制類型轉換

        */

               double result = (f * b) + (l * f) + (i / c) - (d * s);

               System.out.print((f * b) + " + " + (l * f) + " + " + (i /

c) + " - " + (d * s));

               System.out.println(" = " + result);

            }

}

(4) byte b1 = (byte)128;

byte b2 =(byte)-129;

System.out.println(b1);

System.out.println(b2);

    打印結果:-128127

    分析:byte只有八位,只能表示-128—127計算機中負數的存儲方式是補碼。對負數的絕對值的二進制值取反,再加一,即爲負數的二進制碼。如:-1的絕對值1的二進制碼爲00000001,取反得到11111110,再加一爲11111111-128的絕對值128的二進制碼爲10000000,取反得到01111111,再加一爲10000000,正好是Byte的最大表示範圍。而-129的絕對值129的二進制碼爲10000001,取反後得01111110,加一後得01111111,最後結果就是127

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