2014-09-05 1 views
0

Рассмотрим следующий код:Casting против прилагая

int x = 300; 
int y = 200; 

float new_x = 300/1.2f;   // Appending 'f' to the end of operation 
long new_y = (long)Math.pow(y,7); //Casting 

При выполнении обеих операций мой компилятор хочет преобразовать new_x и new_y в два раза.

Но при добавлении или отливке я могу заставить компилятор сохранить его так, как я хочу.

Мой вопрос:

В чем разница между литья метод и добавления метод

ответ

4

прилагая письмо (l, d, е) буквального только указать на компилятор, какой тип вы имеете в виду, чтобы быть буквальным. Если вы пишете литерал в исходном коде, по умолчанию он считается int или double.

Выполнение противоположного преобразования фактически преобразует существующее значение (например, double, возвращаемое Math.pow) в другой тип java.

Литье примитива может привести к усечению. Например, двойное литье в int или long будет потерять десятичную часть, преобразование большого длинного в int может привести к совершенно другому числу (если длина выше Integer.MAX_VALUE) и преобразование в короткий или байтовый то же самое с более сильными пределами.

Casting является гораздо более широким понятием, можно привести примеры и не только примитивы:

public void aMethod(Number n) { 
    Long l = (Long)n; // Obviously will throw exception if you don't call it with a long 
} 

Отливка может вызвать ClassCastException, если вы пытаетесь бросить экземпляр к чему-то это не так.

Это не происходит между примитивами, которые автоматически вытесняются jvm.

Например вызова:

aMethod(1); 

сгенерирует исключение, даже если примитивно INT может быть преобразован в примитив долго, экземпляр Integer не может быть приведен к экземпляру Лонга, как много как экземпляр Человека нельзя бросить на Собака.

 Смежные вопросы

  • Нет связанных вопросов^_^