2014-01-08 2 views
0

вопрос новичок, но я не понял, почему примитивные типы в Java или других OOL нельзя отбрасывать. Что я имею в виду, почему вы не можете сделать:Почему примитивные типы нельзя отливать?

int k = 1; 
    String t = (String) k; 

Я знаю, что примитивные типы не являются классами, но я хотел бы знать о сути этой причине.

+0

Зависит от того, к чему вы относитесь. Покажите нам, что вы имеете в виду. –

+1

Вы * можете * применять примитивные типы. Пример: 'int i = 42; long l = (long) i; '(это может быть даже неявным). Вы также можете понизить, если вы понимаете, какой эффект он будет иметь: 'long l = 42; int i = (int) l; ' –

+0

Я этого не знал.Конечно, я предполагаю, что вы не можете перекрещивать примитивные типы вроде этого ... –

ответ

2

Литых не преобразуют содержимое в памяти. Он просто меняет представление о доступе к контенту. Нет достоверного способа, как 1-байтовый int может представить 2-байтную строку «32».

Вы, конечно, можете бросить 1 байт примитивов, но я предполагаю, что это не то, что вы ожидаете:

@Test 
public void castTests() { 
    assertEquals('7', (char) 55); 
    assertEquals(55, (int) '7'); 
} 

Актерский не изменит содержание в памяти. Таким образом, ваш int 55 становится строковым представлением байта 55, который равен «7».

3

Вы всегда можете использовать (неявно) более узкие примитивные типы для более простых примитивных типов. Это называется расширением примитивного преобразования. Например:

int i = 10; 
long l = i; 

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

long l = 10; 
int i = (int)l; 

См documentation here.

1

Вот документация по Java variable conversions including casting.

Возможно, вы найдете это discussion on Java casting понятным.

До тех пор, пока вы используете оператор трансляции или выражение, а преобразование определенного типа допускается правилами Java, вы можете применять примитивные типы. Однако вам нужно следовать правилам конверсии.

Я не уверен в других объектно-ориентированных языках, однако на C++ вы можете делать всевозможные неприятные отбрасывания, если вы хотите пойти туда с использованием стилей стиля C. Поскольку вы можете оказаться в мире обид, использование стилей в стиле C++ намного предпочтительнее, чем при использовании стилей C, поскольку компилятор проверяет трансляцию.

1

Вы можете использовать примитивные типы в java. Кастинг от более узкого, меньшего размера памяти, типов до более широкого, большего размера памяти, типы неявные. Пример:

int i= 0 ; 
long j = i; // implicit cast from int to long 

Отливка из более крупных видов к меньшему является четким. Вы сообщаете компилятор отлиты из более широкого типа для узкого типа, указав более узкий тип в скобках с помощью следующего синтаксиса i = (int) j; Примера:

long j = 0; 
int i = (int) j; // explicit cast from long to int 
Смежные вопросы