【Java】基礎08:數據類型的轉換


【Java】基礎08:數據類型的轉換

​基本數據類型有四類八種,相互之間有著包含與被包含的關係。

比如9,它既可以是字節型,也可以是短整型,也可以是整型,長整型,甚至還可以是一個字符。

那他們之間是如何轉化的呢?

一、自動轉換

看下面例子:

【Java】基礎08:數據類型的轉換

2和2.0,在我們的認知中,可能就覺得它們其實就是一回事,但是在Java世界裡,它們對應不同的數據類型。

2這個常數默認是int類型的,當它賦值給一個double類型的時候,輸出時就會自動轉換

代碼執行過程中取值範圍小的類型自動轉換為取值範圍大的類型

其中大小範圍如下:

<code>byte、short、char  <  int  <  long  <  float  <  double/<code>

再看一個例子:

【Java】基礎08:數據類型的轉換

1,它既可以是byte、也可以是short、char、int、long,但是在運算時會自動轉換成int。

所以:b1+b2=2(這個2是int類型)

無法將int類型的數值賦值給byte類型。

同理我們可以依次證明byte、short、char 運算時直接提升為int

二、強制轉換

前面我們將一個int類型的數據賦值給一個double類型,它會完成自動轉換。

那反過來會怎麼樣?

【Java】基礎08:數據類型的轉換

1.2默認是double數據類型,當把一個double數據類型的數據賦值給一個int類型時,編譯會報錯。

這個時候我們就需要強制轉換了

由此我們可以理解強制轉換的概念:

  • 自動轉換是取值範圍小的類型自動轉換為取值範圍大的類型
  • 強制轉換是取值範圍大的類型強制轉換成取值範圍小的類型

轉換格式:

<code>  int i=(int)1.2;  數據類型 變量名 = (數據類型)被轉數據值;/<code>

也就是一個括號加上需要強制轉換的數據類型,強制轉換後會發現,i從1.2變成1了。

【Java】基礎08:數據類型的轉換

綜上我們可以發現:自動轉換時是Java自動執行的不需要我們參與,而強制轉換需要我們自己手動執行。

轉換原理:

前面我們學習了字節,其取值範圍為[-128,127]

定義一個byte類型的變量,賦值一個在它範圍之外的一個數,比如257

【Java】基礎08:數據類型的轉換

結果為何為1?

257超過了byte類型的取值範圍,默認為int類型,int類型4個字節,也就是32位。

強制轉換為byte類型,會丟失前三個字節的數據。

【Java】基礎08:數據類型的轉換

故:強轉有風險,操作需謹慎

  • 精度損失:浮點轉成整數,直接取消小數點,可能造成數據損失精度。
  • 數據溢出:int 強制轉成byte 砍掉3個字節,可能造成數據丟失。

三、ASCII編碼表

在學習二進制中我們便知道了計算機底層都是二進制數據(0和1)

那如何讓計算機識別人類的文字呢?

於是就產生出了編碼表的概念。

編碼表 就是將人類的字符和一個十進制數進行對應起來組成一張表格。

表中每個字符都對應了一個十進制數值,如下:

【Java】基礎08:數據類型的轉換

記住最常見的幾個:

  • 字符0對應數字48
  • 字符9對應數字57
  • 大寫字母A對應65
  • 大寫字母Z對應90
  • 小寫字母a對應97
  • 小寫字母z對應122

PS:0~9是字符時,也有對應的十進制數字

每個字符都對應一個數值。如果要進行數值運算,字符可以 代表其對應的數值,比如char轉int:

<code> int i ='0';//此時'0'是一個字符而不是一個數字  
System.out.println(i);//結果是48  
System.out.println('0'+1)//結果是49/<code>
【Java】基礎08:數據類型的轉換

總結:

【Java】基礎08:數據類型的轉換


分享到:


相關文章: