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 2779 Точки

Здравей,

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

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

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

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

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

0
04/07/2021 00:26:01
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.