不合法是说明有数据丢失的风险,比如从double转成int,把一个数据范围较大的数赋值给一个数据范围较小的数,高位会丢失。编译器在处理类型转换的时候,虽然有些转换存在风险,但编译器并没有把它判定为错误,所以是可以输出的。
比如double d=1000.34; 整数部分1000在int类型范围内,所以int k=(int)d;是可以正确得到整数部分的。
i/j/k/p的值说明如下:
char c='A';
int i = (int)c; //'A'的ASCII码是65,所以i的值就是65
float f = 1000.34f;
int j=(int)f; //取1000.34的整数部分,所以j的值是1000
double d = 1000.34;
int k =(int)d;//取1000.34的整数部分,所以k的值是1000
int m=97;
char p = (char)m; //97是字符'a'的ASCII码,所以p就是字符'a'
这只是强制转换,小类型转大数据类型是正常写就可以了,但大数据类型转小数据类型就需要强制转换,也就是例如:(int)X,这种前面加上小数据类型的转换方式
小类型转大类型可以使用强转,大类型转小类型要承担丢失精度的问题;
以下代码编译没问题,运行输出了一个问号'?'
public static void main(String[] args){
char c;
int a = 1000;
c = (char)a;
System.out.println(c);
}