java——数据类型转换
自动转换
范围小的储存到范围大的
- byte—>short—>int—>long—>float—>double
byte a=2;
short b=a;
int c=b;
long d=c;
float e=d;
double f=e;
- 这些从小到大的准换不会出现任何风险(就像容量小的杯子装的再满也总能放到比他容量大的杯子中)
强制类型转换
范围大的存储到范围小的 (若范围大的值超出小的范围,那就会出现数据丢失)
- 小类型=(小类型)大类型;
-
大类型的值在小类型的取值范围内,不会出现数据异常
short s=10; byte b=(byte)s;//10
-
大类型的值不在小类型的取值范围内,会出现数据异常
short s3=129; byte b3 = (byte) s3; System.out.println("b3: "+b3);//-127
-
小数转成整数时,会直接舍弃小数位,极有可能出现数据丢失
double d=5.9; int n=(int) d; System.out.println("n: "+n);//5
小数转整数三种方式
var n = 5.54321; int n1 = (int)n; System.out.println(n1); //5 只保留整数 //保留整数部分 并四舍五入 System.out.println(Math.round(n)); //6 函数 System.out.printf("%.0f%n",n); //6 格式化
-
由于char类型没有负数取值,所有其他类型转为char时都需要进行类型强转
byte byte1=97; char char1=(char) byte1;
boolean类型不参与数据类型转换
任意数据加上双引号或者拼接双引号都会变成String类型
String string1=byte1+""; String string2=""+byte1; String string3="100"; String string4= 5+6+"a" ; System.out.println(string4);//11a String string5= 5+"a"+6 ; System.out.println(string5);//5a6 String string6= "a"+5+6 ; System.out.println(string6);//a56
自动类型提升
发生在数学运算时,当有大类型参与时,会触发类型提升,最终结果将被提升为大类型
最多提升为double,最少提升为int
int num=10;
num=num+1;
//num=num+0.5;//int+double