Java 铸造和包装:一些奇怪的案例
看看这个。。。今天晚上,我正试图在包装纸上涂上一些底漆,这时我发现:Java 铸造和包装:一些奇怪的案例,java,casting,wrapper,Java,Casting,Wrapper,看看这个。。。今天晚上,我正试图在包装纸上涂上一些底漆,这时我发现: Integer i = (Integer)4; Integer i = (Integer)4f; // Doesn't compile! 但如果我重写第二行: Integer i2 = (int)4f; // Then it compiles 有什么区别?为什么在第一种情况下我可以使用包装器类强制转换,而在第二种情况下不能使用包装器类强制转换 Integer i = (Integer)4f; 您正在将float原语强制
Integer i = (Integer)4;
Integer i = (Integer)4f; // Doesn't compile!
但如果我重写第二行:
Integer i2 = (int)4f; // Then it compiles
有什么区别?为什么在第一种情况下我可以使用包装器类强制转换,而在第二种情况下不能使用包装器类强制转换
Integer i = (Integer)4f;
您正在将float原语强制转换为整数包装器-它们不适合。这也与自动装箱无关。即使使用显式装箱,也无法编译:
Integer i = (Integer)(Double.valueOf(4f));
在这里:
Integer i2 = (int)4f;
将浮点原语强制转换为int原语(在此过程中截断),然后java自动将其转换为整数