数据类型转换
字面值常量的自动类型转换
整型
byte a = 1; //无精度丢失自动转换
byte aa = 200; //报错,超出byte表示范围,不会自动转换
short b = 2; //无精度丢失自动转换
int c = 3; //默认整型是int
long d = 4; //自动将没有的位补0,自动转换
long dd = 2147483648; //报错,常量超出默认常量取值范围int
long ddd = 2147483648L; //指定常量的类型为long型
浮点型
float e = 3.14; //报错,会精度丢失,无法自动转换
float ee = 3.14F; //默认浮点数是double型,需要人为指定类型
double f = 3.1415; //默认浮点型是double
字符型
char g = 'a'; //只能存单个字符
String s = "a"; //字符串可以存单个字符
char gg = ''; //报错,没有空字符
String ss = ""; //可以存空字符串
String sS = null; //可以存空
char ggg = 'ab'; //报错,一个字符变量只能存一个字符
String sss = "ab"; //字符串可以存多个字符
布尔型
boolean h = true;
变量的类型转换
int a = 1;
int b = a; //1
//同数据类型无需转换
基本数据类型之间
可以直接转换(自动、强制)
整型与整型之间
比较空间大小,所以大数据类型转小数据类型自动转换,反之需强制转换(可能会丢失部分数据)
byte a = 1;
int b = a; //1
//小类型到大类型自动转换
int a = 1;
byte b = a; //报错
int a = 1;
byte b = (byte)a; //1
//大类型到小类型可能精度丢失,需要强制转换
int a = 1000;
byte b = (byte)a; //-24,溢出
//大类型到小类型可能精度丢失,需要强制转换
//不报错,超过边界,数据精度丢失,只保留后八个比特位
浮点型与浮点型之间
比较空间大小,所以大数据类型转小数据类型自动转换,反之需强制转换(可能会丢失部分数据)
float a = 3.14F;
double b = a; //3.14
//小类型到大类型自动转换
double a = 3.14;
float b = a; //报错
double a = .14; //0可省
float b = (float)a; //0.14
//大类型到小类型可能精度丢失,需要强制转换
浮点数与整型之间:
比较精确程度,所以整型转浮点型自动转换,反之需强制转换(会丢失小数部分数据)
int a = 1;
float b = a; //1.0
int a = 1234567891;
float b = a; //1.23456794E9
//整型转换为单精度浮点类型,可能精度丢失,但是自动转换
int a = 1234567891;
double b = a; //1.234567891E9
//整型转换为双精度浮点类型,无精度丢失,自动转换
long a = 123456789123456789L;
float b = a; //1.23456791E17
double c = a; //1.23456789123456784E17
//长整型转换为浮点类型,可能精度丢失,但是自动转换
float a = 1.9F;
int b = a; //报错
float a = 1.9F;
int b = (int)a; //1
//浮点型转换为整型,可能精度丢失,需要强制转换
//只保留整数部分
字符型与整型之间
字符型转换整型自动转换,反之需强制转换
char a = 'a';
int b = a; //97
//char转换为整型自动转换
int a = 97;
char b = a; //报错
int a = 97;
char b = (char)a; //a
//int转换为char,可能精度丢失,需要强制转换
byte a = 97;
char b = a; //报错
byte a = 97;
char b = (char)a; //a
//看似没有精度丢失,但是底层算法会将a转换成int再赋给b
char a = 97; //a
//直接给char赋值为int字面量为97不超过表示范围自动转换
布尔类型不能与其他基本类型进行转换
引用数据类型之间
可以直接转换(自动、强制上下转型)
基本类型与引用类型之间
不能直接转换,使用包装类进行转换
运算中的自动类型转换
整型与整型之间
向大数据类型转换
byte a = 1;
int b = 1;
byte c = a + b; //报错
int c = a + b; //2,结果自动转换为较大数据类型
浮点型与浮点型之间
向大精度数据类型转换
float a = 1.0F;
float b = 1.0F;
float c = a + b; //2.0
double a = 1.0;
float b = 1.0F;
float c = a + b; //报错
double c = a + b; //结果自动转换伟较大精度数据类型
整型与浮点型之间
向为大精度浮点型转换
int a = 1;
double b = 1.0;
float c = a + b; //报错
double c = a + b; //2.0,结果向浮点大精度数据类型转
int a = 1;
float b = 1.0F;
float c = a + b; //2.0
字符型与整型之间
自动转换为整型
System.out.println('a'+1); //98
//字符类型与整型数相加自动转换为整型
System.out.println(""+'a'+1); //b
//只要有字符串则会变成字符串拼接
字符串与其他数据之间
只要有字符串则会变成字符串拼接
Comments NOTHING