В чем разница между постоянными и конечными переменными в Java?

Пожалуйста, помогите мне понять разницу между постоянными переменными и переменными final в Java. Я немного смущен этим.

Ответ 1

Константа - это понятие, свойство переменной.

final - ключевое слово java для объявления постоянной переменной.


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

Цитируя спецификацию, мы можем прочитать

Переменная примитивного типа [...], которая является конечной и инициализируется константным выражением во время компиляции (§15.28), называется константной переменной.

Следовательно, я полагаю, что мы можем принять (и считаем правильным) этот бином для нашей цели.

Ответ 2

Constant не является ключевым словом в Java.

Это понятие, чтобы сделать любую переменную константу. Для этого мы используем ключевое слово final в Java, так что после инициализации переменной с ключевым словом final никто не может переназначить значение этой переменной.

Ответ 3

В реальном мире существует несколько ценностей, которые никогда не изменятся. Квадрат всегда будет иметь четыре стороны, PI с тремя десятичными разрядами всегда будет 3.142, а день всегда будет иметь 24 часа. Эти значения остаются постоянными. При написании программы имеет смысл представлять их таким же образом - как значения, которые не будут изменены после того, как они были присвоены переменной. Эти переменные известны как константы.

Объявление переменной как константы

При объявлении переменных я показал, что легко присвоить значение переменной int:

int hoursInADay = 24;

Мы знаем, что это значение никогда не изменится в реальном мире, поэтому мы уверены, что оно не меняется в программе. Это можно сделать, добавив модификатор ключевого слова final:

final int HOURS_IN_A_DAY = 24;

В дополнение к ключевому слову final вы должны были заметить, что регистр имени переменной был изменен на верхний регистр в соответствии со стандартным соглашением об именах Java. Это значительно упрощает определение переменных в вашем коде.

Если мы сейчас попробуем изменить значение HOURS_IN_A_DAY:

final int HOURS_IN_A_DAY = 24; 
HOURS_IN_A_DAY = 36;

мы получим следующую ошибку от компилятора:

не может присвоить значение конечной переменной HOURS_IN_A_DAY

То же самое относится и к любым другим переменным примитивного типа данных. Чтобы превратить их в константы, просто добавьте ключевое слово final в их объявление.

Где объявить константы

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

public class Hours {
   public static final int HOURS_IN_A_DAY = 24;
}