final i kopiowanie obiektu czy kopiowanie wartości obiektu

0
public class Volume {
3. Volume v;
4. int size;
5. public static void main(String[] args) {
6. Volume myV = new Volume();
7. final Volume v2;
8. v2 = myV.doStuff(myV);
9. v2.v.size = 7;
10. System.out.print(v2.size);
11. }
12. Volume doStuff(Volume v3) {
13. v3.size = 5;
14. v3.v = new Volume();
15. return v3;
16. } }

 

Proszę o wytumaczeniu wiersza 7 i 8,
czy w wierszu 8 jest zmiana referencji na obiekt czy kopiowanie obiektu? Wygląda na to że kopiowanie ponieważ v2 jest final.

2

Ani jedno ani drugie. v2 nie ma przypisanej referencji i wiersz 8 to przypisanie jej. W javie NIGDY nie wykonuje się kopiowanie obiektu poprzez samo przypisanie. Jeśli chcesz klonować obiekt to musisz to zrobić ręcznie i zaimplementować. To nie C++. Finalność zresztą nie ma z tym związku. Final oznacza że jak raz coś przypiszesz do pewnej referencji to juz tego nie zmienisz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1