为什么我需要在byte和short上显式地转换char原语?

时间:2013-11-21 19:04:50

标签: java casting char byte short

关于基元:当我从较小类型转换为较大类型时,转换是隐式的,当我从较大类型转换为较小类型时,我需要显式地转换基元,这是由于数据丢失而明确的。但是我有一些东西没有得到。当我在某些情况下(字节和短)向上或向下转换为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;
    }
}

2 个答案:

答案 0 :(得分:4)

char是Java唯一的 unsigned 类型,因此其值范围不完全包含任何其他Java类型的值范围。

对于目标类型范围未完全覆盖源类型范围的任何转换,您必须使用显式强制转换运算符。

答案 1 :(得分:1)

我从语言规范中得到了这个:

“首先,通过扩展原语转换(第5.1.2节)将字节转换为int,然后通过缩小基元转换(第5.1.3节)将结果int转换为char。”