Использование метода get() в ArrayList (Проблема с выводом)

Изучаю java самостоятельно, потихоньку ковыряю вообщем.

Столкнулся с такой проблемой, при выводе одного элемента списка, используя метод get() выводит UserName@cac736f, вместо данных которое находятся в этом списке, но когда через цикл вывожу данные из этого же списка, только уже все, то все окей.

С чем это может быть связано.

import java.util.ArrayList;
public class StartRegistor {

    public static void main(String args[]) {
        ArrayList<UserName> userList = new ArrayList<>();
        userList.add(new UserName("Tikhon","qwerty"));
        for (UserName UserName: userList) {
            System.out.println("Name: "+ UserName.name +", password: " +UserName.password);
        }
        System.out.println(userList.get(0));
    }
}
    
class UserName{
     String name;
     String password;
        
     UserName(String name, String password){
         this.name =  name;
         this.password = password;
       }
}

введите сюда код


Ответы (1 шт):

Автор решения: Зонтик

Почему это происходит? Потому что все классы (в том числе и ваш) наследуются по умолчанию от класса Object. А в этом классе есть метод toString(), который неявно вызывается при выводе чего-либо на экран и в данном случае выводит кеш-код объекта (у вас ArrayList с объектами!). Фактически, вы пытаетесь сделать что-то подобное:

public class Test{
  public static void main(String[]args){
     Test t = new Test();
     System.out.println(t);
  }
}

Чтобы вывод был правильным, переопределите метод toString в классе UserName:

@Override
public String toString(){
  return "Name: "+ name +", password: " + password;
}

Теперь при попытке вывести объект класса UserName на экран (что вы и делали) будет выводиться имя и пароль пользователя. И ещё рекомендую посмотреть это видео, чтобы лучше понять вышесказанное: https://www.youtube.com/watch?v=KEQ043yT3F4&list=PLAma_mKffTOSUkXp26rgdnC0PicnmnDak&index=25

→ Ссылка