Использование метода 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