java,为什么不合法,为什么不合法还能正常输出

img


java类型转换
为什么不合法
不合法为什么能正常输入
希望可以得到一个好的解释
谢谢了!

不合法是说明有数据丢失的风险,比如从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);
    }