关于基元:当我从较小的类型转换为较大的类型时,转换是隐式的,当我从较大的类型转换为较小的类型时,我需要显式转换基元,由于数据丢失,这一点很明显。但是有些东西我不明白。在某些情况下(字节和短),当我向上或向下转换为 char 时,尽管字节(8 位)适合 char(16 位),但我总是需要在两个方向上显式转换?
(另见 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)
看我的例子...
public class CastingTest
{
public static void main(String[] args)
{
//casting from smaller to bigger types
short c = 13;
int d = c;
byte f = 34;
short g = f;
byte h = 20;
long i = h;
byte var03 = 6;
double var04 = var03;
//casting from bigger to smaller types
int j = 12;
short k = (short)j;
long m = 56;
int n = (int)m;
double o = 19;
short p = (short)o;
//not possible without explicit cast, but why?
byte var01 = 3;
char var02 = (char)var01;
short var05 = 5;
char var06 = (char)var05;
char var07 = 'k';
short var08 = (short)var07;
}
}
最佳答案
char
是 Java 唯一的unsigned 类型,因此它的值范围不完全包含任何其他 Java 类型的值范围。
对于目标类型范围未完全覆盖源类型范围的任何转换,您必须使用显式转换运算符。
关于java - 为什么我需要在 byte 和 short 上显式转换 char 原语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20129732/