/ / Prečo nevyhlásením poľa finále sa nezmení v Jave? - java, nemeniteľnosť, finále

Prečo nevyhlásenie výsledného poľa neumožní zmenu v jazyku Java? - java, nezmeniteľnosť, konečná

Prečo nevyhlási finálne pole, aby bolo nemenné v Jave? Nevyhlasuje niečo konečné, že ho možno zmeniť?

z otázka súvisiaca s nemennou sústavou je jasné, že vyhlásenie konečného poľa neznamená, že je nemenné.

Nasledovné je možné.

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

Moja otázka znie: Aká je funkcia vyhlasovania konečného výsledku?

odpovede:

32 pre odpoveď č. 1

final je iba o referencie to je označené; v Java neexistuje nič také ako nemenné pole. Keď povieš

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

nebudete môcť povedať

xs = new int[10];

neskôr. Že "s všetko čo final je o. Všeobecnejšie je zabezpečiť, aby bol objekt nemenný, často tvrdá práca a plný rozsah jemností. Jazyk sám o sebe nedáva veľa z tohto poľa.


7 pre odpoveď č. 2

final znamená, že nemôžete zmeniť referencie - tj do tohto poľa nemôžete priradiť iné pole.

"Nemožné" znamená, že nemôžete zmeniť obsah súboru - final nemá na to žiadny vplyv.

Ako ukazuje váš kód, môžete priradiť hodnotu jeden z prvkov súboru, ktorý nezmení odkaz na pole


3 pre odpoveď № 3

Tu robíte odkaz na objekt final, nie primitívny. (Polia sú tiež špeciálne objekty Java.) Odkaz final znamená, že po inicializácii nemôžete prinútiť odporučiť niečo iné. Ale samozrejme môžete zmeniť stav objektu, na ktorý odkazuje konečná premenná.


1 pre odpoveď č. 4

deklaruje pole

V Jave to vyhlasujeme premenné, a vytvoriť objektov (ako sú polia). Tieto akcie sú nezávislé; premennú môžeme deklarovať bez vytvorenia objektu a vytvoriť objekt bez deklarovania premennej.

Immutability je vlastnosť objektu, zatiaľ čo final je vlastnosť premennej. Na objekt sa môže odvolávať niekoľko premenných. Ktorá premenná by mala upravovať nemennosť objektu poľa?

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

Ak to povolíme, údajne nemenná hodnota b[0] bol zmenený. Ale ako tomu môže kompilátor zabrániť? Znemožnením priradenia záverečnej referencie k výsledku, ktorý nie je konečný? Ako by som potom inicializoval pole? Nemohol som to urobiť v slučke ...

A: Čo to dokonca znamená, že pole je nemenné? Mali by sa napríklad kompilovať nasledujúce súbory?

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

C ++ to vyrieši povolením const sa má špecifikovať (alebo vynechať) pre každú úroveň presmerovania. V jazyku Java môže byť finálne špecifikované (alebo vynechané) raz pre každú premennú. Áno, final je jednoduchšie const, podobne ako Java je jednoduchší jazyk C ++. Nechajme to jednoduché, však?


0 pre odpoveď č. 5

To znamená, že nová inštancia objektu nebude povolená.


0 pre odpoveď č. 6

Ako všetci komentovali, vyhlásenie, že je konečné, vám nedovolí priradiť k vašej premennej ďalšie pole. Čítaj viac tu

Samotné pole si zachová svoje vlastnosti ako predtým.