Хотя обьект мы не создаем, но куда тогда эти данные вообще уходят?
в String строка записывается в переменные:
private final byte[] value;
private final byte coder;
private int hash;
В Objec куда, что деется?))
Map<String, Object> map = new HashMap<>();
map.put("Sim", 5);
map.put("Tom", 5.5);
map.put("Arbus", false);
map.put("Baby", null);
map.put("Cat", "Cat");
map.put("Eat", new Long(56));
map.put("Food", new Character('3'));
map.put("Gevey", '6');
map.put("Hugs", 111111111111L);
map.put("Comp", (double) 123);
for (Map.Entry<String, Object> pair : map.entrySet()) {
Object value = pair.getValue();
System.out.println(value);
}
Ubuntu
30 уровень
Почему выводит значения, а не ссылки?
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Роман Java Developer в Luxoft
23 февраля 2020, 17:39
В Java ссылочные типы являются классами унаследованные от класса Object.
0
Ubuntu
24 февраля 2020, 16:56
не сразу понял что создаются обертки для данных.
теперь не понимаю как создается просто обьект))
0
Ksenia Volkova Java Developer в DXC Master
23 февраля 2020, 17:32
Вопрос непонятен.
Object у тебя создаются при заполнении мапы. Потом они выводятся в консоль.
0
Ubuntu
24 февраля 2020, 16:56
Вроде разобрался немного. Создаются ссылочные типы, куда записываются данные, у этих классов есть метод то стринг, который возвращает символы, которые выводятся.
А я думал что создается обьект (не до конца понимаю как он вообще создается) в него кладутся данные, и потом должна выводиться ссылка на этот обьект
0
Ksenia Volkova Java Developer в DXC Master
24 февраля 2020, 17:05
В java любой класс неявно унаследован от Object. Поэтому все экземпляры ссылочных типов (строки, обертки или любые другие) являются в конечном счете объектами (Object).
Если, к примеру, ты напишешь свой класс без метода toString(), то у объекта твоего класса все равно можно будет его вызвать, т.к. он унаследует его (и еще ряд других) от Object.
А если ты его переопределишь, то он будет вызван, даже если экземпляр твоего класса будет находиться в переменной типа Object (как в этой задаче).
0
Ubuntu
24 февраля 2020, 17:34
так я и сделал.
теперь окончательно запутался)
сделал класс с полем инт и конструктором в которое передаю значение.
добавил в мэп.
дальше на экран выводится ссылка на мой объект, а не переменная которую я вводил.
но тут вроде понятно, в моем объекте нет переопределенного метода тоСтринг, в отличие от оберток, где как я понимаю есть переопределенный тоСтринг который выводит переменную .
Как теперь понять что происходит внутри программы, как она узнает где какой тип и какие ссылки создавать и где она хранит все это?
В дебаге не совсем понятно как что происходит.
0
Роман Java Developer в Luxoft
25 февраля 2020, 06:37
Парень, ты слишком сильно заморачиваешься))) Почитай в интернете что такое JDK,JRE,JVM. Тогда ты поймешь, что все конвертируется в байткод)))
А как устроена память: Стек и Куча.
0