/**
* 类型转换
*/
public static void main(String[] args) {
//1、自动转换,容量小的数据类型可以自动转换为容量大的数据类型,此处容量指的是表示数的范围
byte a = 100;
int b = a;
//2、强制类型转换,当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围就会被截断成为一个完全不同的值
int c =300;
byte d = (byte)c;
System.out.println(d);//300超出了byte类型的表示范围,强制转换时被截断,输出值为44
//3、表达式中的类型提升,所有的二元运算符(+-*/%),都会有类型提升问题
int e = 3;
long f = 4;
// int g = e+f;//报错,结果为int类型,表达式中存在long类型,有可能会损失精度
//正确写法
int g = (int) (e+f);
long h = (e+f);
//4、运算过程中超出表示范围
int i = 1000000000;
int j = 20;
int k = i*j;//值为200亿,超出了int类型的表示范围,输出-1474836480,虽未报错,但与期望结果不符
long l = (long)i*j;//正确写法,先进行类型提升,建议将long类型放在第一位,否则多位相乘时,前面的运算可能已溢出
//5、常用类型转换函数
// string->byte
// byte ss = Byte.parseByte(String s)
// byte->string
// String ss = Byte.toString(byte s);
// char->string
// String ss= Character.toString(char s);
// string->short
// short ss = Short.parseShort(String s);
// Short->String
// String ss= Short.toString(short s);
// String->Integer
// int ss = Integer.parseInt(String s);
// Integer->String
// String ss = Integer.toString(int s);
// String->Long
// Long ss = Long.parseLong(String s);
// Long->String
// String ss = Long.toString(long s);
// String->Float
// Float ss = Float.parseLong(String s);
// Float->String
// String ss = Float.toString(float s);
// String->Double
// Double ss = Double.parseLong(String s);
// Double->String
// String ss = Double.toString(double s);
//6、基本数据类型对应封装类的转换,此处以Integer类型为例
Integer x = 123;
String y = x.toString();//Integer对象转换为字符串类型
int z = 1234;
String s = String.valueOf(z);//使用字符串对象方法将int类型转换为字符串类型
}
类型自动提升规则:
a和b作某种运算
a和b中有double,结果就是double
a和b中有float,结果就是float
a和b中有long,结果就是long
除此之外,结果都是int