Професионална програма
Loading...
ivan.n.toshev avatar ivan.n.toshev 1 Точки

Повтарящи се имена на нови обекти

Здравейте,

 

Забелязах, че когато инстанцирам обекти, те трябва да имат различни имена.

 

package com.company;

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {

        List<Car> myList = new ArrayList<>();

        //instantiate them manually
        Car myCar = new Car();
        //Car myCar = new Car(); //error
        myList.add(myCar);
        Car friendsCar = new Car(); //different names
        myList.add(friendsCar);

 

Но, ако инстанцирам няколко обекта през напр. цикъл, то джава не вижда проблем. И в двата случая мога да ги добавя в списък без проблем.


        //instantiate automatically
        int count = 3;
        for (int i = 0; i < count; i++) {
            Car newCar = new Car(); //the same name
            myList.add(newCar);
        }

        System.out.println("end");
    }
}

 

Когато дебъгвам всичкия този код, за да видя как се пълни списъка, виждам нещо такова:


/*myList = {ArrayList@793} size = 5
0 = {Car@794}
1 = {Car@795}
2 = {Car@797}
3 = {Car@798}
4 = {Car@799}

*/

 

И първите два ръчно инстанцирани обекта са там, както и другите три, които създадох през цикъла. Интересното е че нямат имена. Та, въпросът ми е, какво се случва с имената на обектите в тези две ситуации?

Тагове:
0
Java OOP Advanced
icowwww avatar icowwww 1452 Точки

Здравей,

Това може би ще помогне:

1. При създаването на променлива вътре в цикъл тя съществува в текущата итерация

2. Това, което наричаш имена на обекти, всъщност е име на променливата, в която си запазил обекта.

3. Когато добавяш обекта в списък, добавяш самия обект запазен в променливата и самото име на променливата няма нищо общо с обекта. Тя е просто връзката с обекта.

4. Ако добавиш 2 пъти обект записан в променлива към списъка, в списъка ще има 2 позиции, които сочат към един и същи обект-това ще е същия обект записан 2 пъти. Тоест ако добавиш на нулева и първа позиция в списъка една и съща инстанция на класа Car и след това се опиташ да промениш някое property на обекта на позиция 0, ще се промени и в елемента на позиция 1

0
04/07/2021 00:26:01