примитивный тип float с символами юникода в java

почему нижеприведенная строка кода не даст мне никакой ошибки компиляции

public class Test4
{

public static void main(String...a)
{
        float f = \u0038;//Line 1
        long L2 = 3L;
        float fd = (float) 2.2;
        char c = '\u005E';
        byte e = 100;

}
}

строка 1 float f = \u0038; не даст мне никакой ошибки компиляции

и если это символы Юникода, то можем ли мы использовать их с плавающими, двойными, целыми и другими примитивными типами. каков стандарт использования символов юникода с примитивным типом, и если да, то почему мы можем его использовать ??

спасибо


person Nirav Prajapati    schedule 23.11.2014    source источник
comment
\u0038 — это просто сокращение от 8.   -  person Oliver Charlesworth    schedule 23.11.2014


Ответы (1)


float имеет 32 бита и находится в диапазоне от ±1,4E-45 до ±3,4028235E+38 Unicode имеет 16 бит и находится в диапазоне от > to ￿ или 0 ... 65535 Поэтому float f = 8 работает, потому что формат float больше, чем формат char. Так ничего не потеряется. Но если вы перевернете назначения, как показано ниже, вы увидите работу приведения и важное значение формата.

float f = \u0038;   // OK because 16 bits fit a format of 32 bits
char x = (char) f;  // no complaint because you "explicitly" cast f 
                    // and take risk of losing precision
char y = f;         // javac will complains "error: possible loss of precision" 
                    // in order to warn you about the hidden "bugs" you might get... 
person Community    schedule 23.11.2014