java 整数类型字面量不是int吗?

    int a = 1;
    byte b = 1;
    short c = 23;
    long d = 123;
    
    b = (byte)a;
    c = (short)a;

为什么不用强转字面量 ,但变量之间却需要强转?

整数类型都是有区间的
转换的时候
大的赋值给小的
可能会造成精度缺失
例如:a = d;
d中的long类型可能会大于int所以要进行强转
但是如果超出范围,会出现不匹配的情况
例如:int a = 178; byte b = 2;
byte b = (byte)a;
因为byte的范围是-128~127
所以赋值后不会输出178
而是进行一些二进制的操作输出的另一个数字

小的赋值给大的
例如:d = a;
因为a的值无论有多大,都是在int区间的,而int是肯定小于long的所以就可以省略了

自动类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级。

低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double 

数据类型转换必须满足如下规则:

  • 不能对boolean类型进行类型转换。

  • 不能把对象类型转换成不相关类的对象。

  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  • 转换过程中可能导致溢出或损失精度,例如:

    int i =128;   
    byte b = (byte)i;
    

    因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出 返回-128。

  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:

    (int)23.7 == 23;        
    (int)-45.89f == -45
    

必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

看看java基础数据类型
Java数据类型转换(从低精度到高精度排序) - 百度文库

你给他换了数据类型 不强转怎么办?