數據類型:基本數據類型及引用數據類型
基本數據類型:byte、short、int、long、float、double、char及布爾類型(boolean)
在Java語言中除布爾(boolean)類型外,其它數據類型均可進行相互轉換
分類
自動類型轉換、強制類型轉換
1 自動類型轉換
變量在做計算時,可能會出現溢出的情況,Java採用自動類型轉換的方式處理:佔用內存小空間的數據類型向大空間的數據類型自動轉換
1.1 整數類型的自動轉換
規律:byte、short、char在做計算時,會自動提升數據類型爲int
package blog.csdn.net.karen.javasedemo;
/**
* 變量演示,數據類型轉換
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {
public static void main(String[] args) {
byte a = 1;
//錯誤: 不兼容的類型: 從int轉換到byte可能會有損失
//a定義爲變量,編譯檢測:假設a取byte數據類型中的最大值時,與1做加運算將超出byte數據類型的取值範圍,造成精度損失
//byte b = a + 1;
int b = a + 1;
System.out.println("b = " + b);
short c = 1;
//short d = c + 2;
//short在運算時自動提升數據類型爲int
int d = c + 2;
System.out.println("d = " + d);
char e = 'a';
//char類型數據在參與運算時,每一個char類型的數據都對應一個數值類型的ASCII碼,參與計算的是字符對應的ASCII碼
int f = e + 1;
System.out.println("f = " + f);
//short、byte與char任意類型組合運算,自動提升爲int
int g = a + c;
System.out.println("g = " + g);
}
}
int在與其他數據類型的數據計算達到溢出時,直接返回溢出後的數據值
package blog.csdn.net.karen.javasedemo;
/**
* 變量演示,數據類型轉換
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {
public static void main(String[] args) {
int intTypeMaxValue = 2147483647;
/*
計算過程:
1、計算機能直接識別的代碼爲二進制代碼
2、2147483647 轉換爲二進制碼:int數據類型佔內存大小4個字節,1個字節佔8個位,首位爲符號位
0111 1111 1111 1111 1111 1111 1111 1111
3、1 轉換爲二進制碼
1
4、兩者相加結果(二進制)
1000 0000 0000 0000 0000 0000 0000 0000
5、兩者相加結果(十進制)
-2147483648
*/
long resultValue = intTypeMaxValue + 1;
//輸出 resultValue = -2147483648
System.out.println("resultValue = " + resultValue);
}
}
任何整數類型與long類型做運算,都自動轉換爲long類型
package blog.csdn.net.karen.javasedemo;
/**
* 變量演示,數據類型轉換
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {
public static void main(String[] args) {
byte number1 = 1;
long number2 = 2;
//錯誤: 不兼容的類型: 從long轉換到byte可能會有損失,也就是說 number1 + number2 的結果爲long數據類型
//byte result = number1 + number2;
long result = number1 + number2;
System.out.println(result);
}
}
常量在做運算時,只要不超出定義的數據類型的範圍就不會出錯,也不會發生類型的自動提升
1.2 小數類型的自動轉換
package blog.csdn.net.karen.javasedemo;
/**
* 變量演示,數據類型轉換
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {
public static void main(String[] args) {
float a = 1.2f;
//float類型與常量計算,不會出現類型自動提升
float b = a + 1;
System.out.println(b);
//float與float計算,不會出現類型自動提升
float c = a + b;
System.out.println(c);
byte byteValue = 1;
short shortValue = 1;
int intValue = 1;
long longValue = 1;
//float類型和所有整數類型計算都會轉換成float
float d = a + shortValue;
System.out.println(d);
//double類型同理
//double 與 float 計算,類型自動轉換成 double
}
}
總結:不同數據類型參與計算後,結果自動向大的一個數據類型轉換
2 強制類型轉換
佔用內存大空間數據類型 向 小空間數據類型 轉換
語法:(目標數據類型) 轉換的變量;
2.1 整數類型的強制轉換
強制類型轉換可能存在損失精度的情況:轉換的數值超出目標轉換類型
package blog.csdn.net.karen.javasedemo;
/**
* 變量演示,數據類型轉換
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {
public static void main(String[] args) {
int number = 100;
//short result = number;
//將int強制類型轉換爲short
short result = (short) number;
System.out.println(result);
//將int強制類型轉換爲 byte
byte result1 = (byte) number;
System.out.println(result1);
long number1 = 12;
byte result2 = (byte) number1;
System.out.println(result2);
}
}
2.2 小數類型的強制轉換
package blog.csdn.net.karen.javasedemo;
/**
* 變量演示,數據類型轉換
* <p>
* Created by Karen Chia on 2018/11/8
*/
public class VariableDemo {
public static void main(String[] args) {
float a = 1.1f;
//小數轉換爲整數類型(long、int、short及byte)後會捨棄小數位
int result1 = (int) a;
System.out.println(result1);
double b = 2.1;
float result2 = (float) b;
System.out.println(result2);
//char類型可轉換爲byte、short、int、long、float及double
char c = 'a';
byte result3 = (byte) c;
System.out.println(result3);
//整數類型轉換爲char字符類型
char result4 = (char) 97;
System.out.println(result4);
}
}