Java數據類型轉換問題


基本數據類型

整數型

byte --- 字節型 --- 1個字節 --- -27~27-1 -> -128~127

byte b1 = 25; byte b2 = 127;

short --- 短整型 --- 2個字節 --- -215~215-1 -> -32768~32767

int --- 整型 --- 4個字節 --- -231~231-1 --- 在Java中整數默認為int類型

System.out.println(5);

long --- 長整型 --- 8個字節 --- -263~263-1 --- 需要在結尾添加l/L作為標識

long l = 2L;

浮點型

float --- 單精度 --- 4個字節 --- 大概-1038~1038 ---需要在結尾添加f/F作為標識

float f = 3.5f;

double --- 雙精度 --- 8個字節 --- 大概-10308~10308---在Java中小數默認為double類型

double d = 2.64;  double d2 = 5.21D;  double d3 = 7.33d;

double d = 4e4; 表示4*104 aeb表示a*10b,表示十進制的科學計數法

double d = 0x5p3; 表示十六進制的科學計數法 xpy表示x*2y

字符型

char --- 字符型 --- 2個字節 --- 0~65535 ---默認編碼就是utf-16

char c = ‘a’;  char c2 = ‘4’; char c3 = ‘\u20ac’;

// 不存在空字符和負數的字符,無論這個字符是純數字或者是字符

boolean類型

數據類型的轉換

自動類型轉換/隱式轉換

byte b = 3;

int i = b;

 

int i =7;

long l = i;

 

float f = 3.57f;

double d = f;

規律一:小的類型可以自動轉化為大的類型

long l = 10; --- Java中整數默認為int,所以10就是int類型,int可以自動提升為long類型 --- 如果一個整數在int的范圍內,那么在賦值給long類型的時候可以不加L

int i = 10;

float f = i;

規律二:整數可以自動轉化為小數,但是可能產生精度損失

float f = 500;

char c = ‘a’;

int i = c;

規律三:字符可以自動轉化為整數

 

short類型和char類型范圍沒有完全重合也不能完全包含

short s = ‘a’; --- 可以 --- a是字面量,是一個確定的值所以在編譯的時候就能確定 a的值是否在short的取值范圍內;如果在這個范圍內,就允許轉化

char c = 97; --- 可以 --- 97是字面量,是一個確定的值。所以在編譯的時候就能確定 97的值是否在char的取值范圍內;如果在這個范圍內,也允許轉化

char c = ‘a’;

short s = c; --- 不可以 --- c是變量,所以在編譯期間只能確定c是一個char類型的值但是不能確定c的具體值;那么就會在編譯期間比對兩個類型之間是否能夠完全轉化,發現char類型不能完全轉化為short類型,所以認為這個值會有超過short取值范圍的風險,因此不允許轉化

short s = 97;

char c = s; --- 不可以

byte/short/char可以參與自增/自減運算,運算完成之后結果類型沒有改變 --- 因為在底層做了一次強制轉換

規律四:byte,short,char在計算的時候會自動轉換為int類型。以下代碼報錯。單純的賦值不算是運算。

char c = 97;

		<p style="margin-left:0pt;">c = c + 1;</p>
		</td>
	</tr></tbody></table><p>規律五:在自增自減以及簡化運算的時候會發生強轉,所以以下代碼即使在超出范圍的情況下都不會報錯。</p>

char c = 97;

		<p style="margin-left:0pt;">c *= 300;</p>
		</td>
	</tr></tbody></table><p style="margin-left:0pt;">&nbsp;</p>

現在的問題是

Float f = 2.6; // 報錯①在Java中小數默認為double類型

但是char a = 5; // 成功②在Java中整數默認為int類型

他們兩個都是字面量但是結果不同,自動int理論和字面量理論都遇到了挑戰。按照字面量理論來說①的實際值沒有超過但是報了錯②完美運行。按照自動int理論來說,②應該報錯但是它是按照字面量理論執行的。綜上,所以不知道真正的假設。

Byte(等)的溢出問題

強制類型轉換/顯式轉換

int i = 5;

byte b = (byte)i; 表示將變量i強制轉換為byte類型之后再賦值給變量b

注意:大類型可以強轉為小類型,但是在轉化的時候因為字節的損失所以可能導致數據不准確

double d = 3.97;

int i = (int)d; --- 小數在轉化為整數的時候會舍棄小數部分。

 

posted @ 2018-11-06 09:40  星朝  閱讀( 711)  評論( 0編輯  收藏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM