/ / Чому оголошення про остаточний масив не зробить його незмінним на Java? - java, незмінність, фінал

Чому не оголосить остаточний масив, зробить його незмінним у Java? - java, незмінність, фінал

Чому виграли "t, оголосивши остаточний масив, зробивши його незмінним на Java? Чи не оголосити щось остаточне означає, що його не можна змінити?

Від питання, що стосується незмінного масиву Зрозуміло, що оголошення остаточного масиву не робить його незмінним.

Можливе наступне.

final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;

Моє запитання: Яка функція оголошення тут остаточним?

Відповіді:

32 за відповідь № 1

final йдеться лише про те довідка що позначено ним; у Java немає такого поняття, як незмінний масив. Коли ти кажеш

private final int[] xs = new int[20];

вам не дозволять говорити

xs = new int[10];

в подальшому. Це "с все що final є про. Більш загально, забезпечення того, що об’єкт є непорушним, часто є наполегливою працею та рядом тонкощів. Мова сама по собі не дає багато чого для цього з вікна.


7 для відповіді № 2

final означає, що ви не можете змінити довідка - тобто ви не можете призначити інший масив цьому полі.

"Незмінний" означає, що ви не можете змінити зміст масиву - final не впливає на це.

Як показує ваш код, ви можете призначити значення один із елементів масиву, який не змінює посилання на масив


3 для відповіді № 3

Ось ви робите посилання на об'єкт final, не примітив. (Масиви теж є спеціальними об’єктами Java.) Зробити посилання final означає, що ви не можете змусити його посилатися на щось інше після його ініціалізації. Але, звичайно, ви можете змінити стан об'єкта, на який посилається остаточна змінна.


1 для відповіді № 4

оголошення масиву

На Java ми заявляємо змінні, і створити об'єкти (наприклад, масиви). Ці дії є незалежними; ми можемо оголосити змінну, не створюючи об’єкт, і створити об'єкт без оголошення змінної.

Незмінюваність - це властивість об'єкта, а остаточна - властивість змінної. Об'єкт може посилатися на кілька змінних. Яка змінна повинна регулювати незмінність об’єкта масиву?

int[] a = {1,2,3};
final int[] b = a;
a[0] = 10; // should this be legal?

Якщо ми дозволимо це, нібито незмінна цінність b[0] був змінений. Але як компілятор може запобігти цьому? Здійснюючи неможливість присвоєння нефіналу до остаточного посилання? Як я б тоді ініціалізував масив? Я не міг зробити це в циклі ...

І: Що навіть означає, що масив є незмінним? Наприклад, чи слід компілювати наступне?

final int[][] a = {{1,2}, {3,4}};
a[1][1] = 5;

C ++ вирішує це, дозволяючи const бути визначеним (або пропущеним) для кожного рівня непрямості. У Java фінал можна вказати (або пропустити) один раз на змінну. так, final є більш простим const, як і Java, це простіший C ++. Нехай буде так просто, чи не так?


0 для відповіді № 5

Це означає, що новий екземпляр об’єкта не буде дозволений.


0 для відповіді № 6

Як і всі коментовані, оголошення його остаточним не дозволить вам призначити інший масив для вашої змінної. Читати далі тут

Сам масив збереже властивості, як і раніше.