2012-08-05 3 views
0

Есть ли преимущества от делать преобразования, как этотНормальный тип преобразования против указателя преобразования

int i = 1024; 
byte b = (byte)i; 

над делает этот

int i = 1024; 
byte b = *((byte*) &i); 

я имею в виду, если вы хотите использовать второй метод, который вы должны использовать небезопасные кода, это означает, что JIT не может оптимизировать его по своему усмотрению (я думаю, что он делает внутренне второй способ) и так далее.

Может ли кто-нибудь объяснить мне, когда и почему использовать первый/второй метод?

Приветствия

+1

Какую проблему решаете здесь? (из [FAQ] (http://stackoverflow.com/faq#dontask): «Вы должны задавать только практические, ответные вопросы, основанные на реальных проблемах, с которыми вы сталкиваетесь».). – Oded

+0

Я цитирую: «Может ли кто-нибудь объяснить мне, когда и почему использовать первый/второй метод?» Это не проблема, я решаю trieng, это вопрос, когда использовать первый, а затем использовать второй;) – hellow

+0

не компилируется –

ответ

2

Эти два не эквивалентны.

Первый - это простой язык, определяющий определенный язык. Его результат хорошо определен: первый возвращает 8 младших значащих бит.

Второй - фактически реинтерпрет-литье. Он возвращает первые 8 бит в памяти. То, что бывает на типичных мало-конечных системах, одинаково, но различаются по системам большой величины.

Есть несколько редких случаев, когда реинтерпрет-приведения полезны, но это не один из них. Вы всегда должны использовать обычные броски, если у вас нет проблемы, которая может быть решена только с помощью переинтерпрета.

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