Базовые типы данных Java и ссылочные типы — это то, что есть в Java

Java программист Java EE Язык программирования

Добавлены недостающие изображения в этой статье, пожалуйста, читайте с уверенностью.

Предыдущие статьи иногда оставляют некоторые вопросы для размышления, в основном, чтобы все могли больше подумать о содержании статьи, поэтому ответов не осталось, и ответы в области комментариев также разнообразны. Я написал эту статью, чтобы помочь вам закрепить предыдущее содержание. Цзы однажды сказал: «Просматривая старое и изучая новое, вы можете стать королем». Всего естьЧетыре типа из восьми основных типов данных, см. таблицу ниже:

Помимо этих четырех типов и восьми основных типов, существуют и другие.Объекты, также известные как ссылочные типы, включают в себя массивы.

Взгляните на пример кода:

Класс Person, который предоставляет конструктор и некоторые методы получения/установки:

Вот основной метод теста:

Посмотрите на первое предложение кода:

Базовый тип данных, объявленный в теле метода, находится в памяти стека., Давайте рисовать

Продолжайте выполнять следующий код

Для основных типов данных,Присвоение (= знак) эквивалентно копированию значения, скопируйте значение int1 из 100 в int2 и продолжайте рисовать

int1=500, напрямую измените значение int1 на 500, как показано на рисунке ниже.

Выведите значения int1 и int2 соответственно, думаю, никто не ответит неправильно, это 500 и 100 соответственно.

Давайте посмотрим на инициализацию массива

Сначала инициализируйте arr1,При выполнении ключевого слова new пространство памяти будет выделено в памяти кучи, а адрес пространства памяти будет присвоен arr1.

Продолжайте выполнять следующий код

Здесь нет нового ключевого слова, когда инициализируется arr2, и он не создает новое пространство в памяти кучи, а напрямую назначает адрес памяти кучи, хранящийся в arr1, arr2.Для ссылочных типов,Присвоение (знак =) эквивалентно копированию адреса памяти,Другими словами, arr1 и arr2 теперь указывают на одну и ту же динамическую память, как показано на рисунке ниже.

Затем выполните следующий код

Хотя только изменить значение позиции нижнего индекса 3 массива arr1

Но из-заМассив arr1 и массив arr2 указывают на одну и ту же память кучи,Выведите значения arr1[3] и arr2[3], оба8.Вы поняли это правильно?

Давайте посмотрим на инициализацию объекта

Когда вы видите это новое, этот продукт, должно быть, открыл пространство памяти в куче памяти.Существует объект String с именем name в Person.Объект String немного особенный.Хотя нет ключевого слова new, он все еще открыт в куча памяти. пространство вString — очень распространенный классЭто было объяснено в этой статье, поэтому я не буду здесь вдаваться в подробности.Нижний слой String реализуется массивами, массивы также являются ссылочными типами, а age является базовым типом данных, как показано на следующем рисунке.

Содержимое большого блока на приведенном выше рисунке представляет собой воплощение всего объекта Person в динамической памяти. Продолжайте выполнять следующий код.

Без нового ключевого слова per2 не создаст новое пространство в памяти кучи.Как и массив, адрес памяти per1 напрямую назначается per2.

Когда мы изменяем свойства per1

Как показано в следующих двух красных полях, назначение объекта (массив также является объектом) фактически эквивалентно перенаправлению ссылки на динамическую память.Основной тип данных — это прямое изменение значения, как показано на следующем рисунке.

Следовательно, независимо от того, печатаются ли имя и возраст per1 или per2, напечатанный результат"Ли Си", 35, вы правильно ответили? Наконец, давайте проверим, согласуются ли результаты с тем, что сказано в тексте.

Результаты точно такие же, оглянитесь назадКомпаратор "==" в Java, результат понять не сложно, код такой

Результаты равны false, true и true соответственно. Когда обе стороны == являются базовыми типами данных, == сравнивает, равны ли два значения с обеих сторон. Когда обе стороны == являются ссылочными типами, он сравнивает два адреса памяти.Можно увидеть, указывают ли две ссылки на один и тот же адрес в куче памяти, как показано ниже

Когда новичок изучает Java, может быть легко сделать ошибки в ссылочных типах, таких как упомянутые в этой статье arr1 и arr2.Многие люди хотят скопировать значение для использования при написании кода, но они не знают, когда модифицируют arr1 ., значение arr2 также изменилось.

Содержание этой статьи объясняется здесь.Рисовать картинки непросто.Я надеюсь, что в будущем вы будете больше думать о появлении переменных в памяти, и сможете узнать больше с меньшими усилиями. Существует четыре типа из восьми базовых типов данных.В этой статье указан только тип int.Остальные 7 базовых типов совместимы с int, поэтому я не буду приводить здесь примеры.


Наконец, давайте поговорим о последних мыслях, оставшихся в предыдущей статье, прежде всегоЗапутанный код JavaМысли в конце сочинения

очень просто неверно

Оба объекта создаются заново, и два пространства памяти открываются.Ссылки i7 и i8 не указывают на один и тот же адрес в куче памяти, поэтому печать ложна.

Что касаетсяМассивы в JavaМысли в конце сочинения

Я считаю, что друзья, внимательно прочитавшие эту статью, знают, сколько в ней распечатано.Если непонятно, то рекомендуется перечитать эту статью, пока не поймете.

Примечание. Печать массива символов немного отличается, печать массива int предназначена для печати адреса, а массив символов — для печати содержимого массива. Весь код в этой статье был загружен в общедоступный аккаунт: sayayJava, обратите внимание на загрузку, если она вам нужна.


Если вам нравится эта серия статей,Пожалуйста, поставьте лайк или поделитесь для меня, ваша поддержка является движущей силой для меня, чтобы продолжать. Вы также можете оставить сообщение в области комментариев, чтобы узнать, что вы хотите знать. Если у вас есть возможность, эта колонка объяснит это. Наконец, не забудьте заплатить внимание ко мне.

Предыдущий:String - очень распространенный класс - материал Java

Следующий:Автоупаковка/распаковка в Java — материал Java

Перепечатка приветствуется, но с указанием "автора" и "оригинального адреса". Пожалуйста, сохраните этот абзац в тексте для перепечатки, спасибо за уважение авторских прав. Для коммерческого воспроизведения или публикации, пожалуйста, свяжитесь с автором для получения разрешения.