Warum muss ich Zeichenprimitive explizit in Byte und Short umwandeln?

Grundelemente: Wenn ich von kleineren zu größeren Typen umsetze, sind die Umsetzungen implizit. Wenn ich von größeren zu kleineren Typen umsetze, muss ich die Grundelemente explizit umsetze, was auf Datenverlust zurückzuführen ist. Aber es gibt etwas, das ich nicht verstehe. Wenn ich in einigen Fällen ein Up- oder Downcast für char durchführe (Byte und Short), muss ich immer explizit in beide Richtungen casten, obwohl Byte (8 Bit) in char (16 Bit) passt.

(siehe auchhttp://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

Siehe meine Beispiele ...

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;
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage