2013-09-24 2 views
0

В чем разница между значениями и литералами? Значения, по-видимому, имеют динамический тип, а литералы, по-видимому, имеют статический тип, согласно слайду четыре первой страницы в Here. Но это не буквальная ценность?Разница между значениями и литералами

+1

http://stackoverflow.com/questions/16327483/whats-the-difference-between-a-boolean-literal-and-a-boolean-value – Josay

ответ

0

Использование терминов, используемых в этом слайд-шоу - литерал является видом контейнера, поэтому лучше сравнить значения и контейнеры.

Контейнер "содержит" значение. Если вы напишете int x=1;, то x - это контейнер, а номер один - значение. Но 1 также является контейнером - точнее, буквальным. Слайд-шоу подчеркивает, что существует разница между значением единицы и литералом 1.

При кодировании вы фактически не можете получать доступ к значениям - вы можете делать это только через контейнеры. Вот почему вы можете написать x и 1, но не значение, которое является номером один.

Литерал - это контейнер, который можно перевести непосредственно на значение, не глядя на его окрестности - например, 1 можно перевести непосредственно на номер один. x не может быть переведено на значение таким образом, так как это переменная, и мы не знаем, что она держит, если мы не посмотрим на окружающий код.

Что касается динамических и статических типов - контейнер имеет статический тип, известный во время компиляции. Если это переменная, это объявленный тип переменной. Если это выражение, это выведенный тип выражения. Если это буквальный, это прямой тип литерала. Компилятор может указать тип каждого контейнера без запуска программы и не заботиться о том, какие значения он будет удерживать после запуска программы.

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

Хотя типы значений являются динамическими, Java является статическим языком, поскольку обычно вы не смотрите на динамический тип. Поскольку вы можете ссылаться только на значение через контейнер, статический тип контейнера используется, когда вы делаете что-то со значением.

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