В чем разница между примитивным и ссылочным типами? - PullRequest
51 голосов
/ 09 января 2012

Это прошлый экзаменационный вопрос, и мне было интересно, что такое первобытный тип и ссылочный тип?Я знаю, что с массивом ссылочный тип - это то, где массив состоит из объектов или переменных, но примитивный тип - это то, где вы можете создать массив с помощью только int или строк.(верно?)

Как вы думаете, как бы вы ответили на вопрос по тесту и получили бы хорошую оценку?Не обращаясь непосредственно к примитивному типу ARRAY ... Есть ли способ сделать это без этого?Или вы думаете, что было бы хорошо просто объяснить это массивом.

Ответы [ 7 ]

115 голосов
/ 17 августа 2015

Из книги OCA JAVA SE 7

Так же, как мужчины и женщины принципиально различны (по словам Джона Грей, автор книги «Мужчины с Марса, Женщины с Венеры», примитив переменные и ссылочные переменные объекта отличаются друг от друга несколько способов. Основное отличие заключается в том, что примитивные переменные хранят фактические значения, тогда как ссылочные переменные хранят адреса объекты, к которым они относятся. Давайте предположим, что класс Person уже определено. Если вы создаете переменную int и объект ссылочная переменная person, они будут хранить свои значения в памяти как показано на рисунке 2.13.

int a = 77;
Person person = new Person();

enter image description here

40 голосов
/ 09 января 2012

Это примитивные типы в Java:

  • булево
  • байт
  • короткий
  • 1010 * символ *
  • INT
  • длинный
  • поплавок
  • двойной

Все остальные типы являются ссылочными типами: они ссылаются на объекты.

Это первая часть учебника Java по основам языка .

7 голосов
/ 31 августа 2016

Примитивные типы данных:

  • Предопределено языком и названо ключевым словом
  • Всего нет = 8
    булево
    символ
    байт
    короткий
    целое число
    длинный
    плавать
    двойной

Типы данных ссылки / объекта:

  • Создано с использованием определенных конструкторов классов
  • Используется для доступа к объектам
  • Значение по умолчанию для любой ссылочной переменной равно нулю
  • Ссылочная переменная может использоваться для ссылки на любой объект объявленного типа или любого совместимого типа.
3 голосов
/ 25 июля 2013

это примитивные типы данных

  • булево
  • символ
  • байт
  • короткий
  • целое число
  • длинный
  • поплавок
  • двойной

сохраняется в стеке в памяти, которая является управляемой памятью другого типа данных объекта или эталонного типа данных, хранящихся в головке в памяти, управляемой GC

это самое важное отличие

2 голосов
/ 02 октября 2018

Поскольку многие более или менее правильно указали, что такое ссылочный и примитивный типы, может быть интересно, что у нас есть несколько более важных типов в Java. Вот полный список типов в Java (насколько я знаю (JDK 11)).

Тип примитива

Описывает значение (а не тип).

11

Тип ссылки

Описывает конкретный тип, экземпляры которого расширяют объект (интерфейс, класс, перечисление, массив). Кроме того, TypeParameter на самом деле является ссылочным типом!

Integer

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

Примечание 2: Параметр типа описывает тип, имеющий необязательную нижнюю или верхнюю границу, и на него можно ссылаться по имени в его контексте (в отличие от подстановочного типа). Параметр типа обычно может применяться к параметризованным типам (классам / интерфейсам) и методам. Тип параметра определяет идентификатор типа.

Тип подстановочного знака

Выражает неизвестный тип (как любой в TypeScript), который может иметь нижнюю или верхнюю границу, используя super или extension.

? extends List<String>
? super ArrayList<String>

Тип пустоты

Небытие. Нет значения / экземпляр возможен.

void method();

Нулевой тип

Единственное представление - «ноль». Это используется особенно во время вычислений помех типа. Ноль - это особый случай, логически принадлежащий любому типу (может быть назначен любой переменной любого типа), но фактически он не считается экземпляром какого-либо типа (например, (null instanceof Object) == false).

null

Тип соединения

Тип объединения - это тип, который является набором альтернативных типов. К сожалению, в Java он существует только для оператора multi catch.

catch(IllegalStateException | IOException e) {}

Тип помех

Тип, совместимый с несколькими типами. Поскольку в Java класс имеет не более одного суперкласса (у Object его нет), типы помех допускают, чтобы классом был только первый тип, а каждый другой тип должен быть интерфейсным типом.

void method(List<? extends List<?> & Comparable> comparableList) {}

Неизвестный тип

Тип неизвестен. Это относится к определенным лямбда-определениям (не заключенным в квадратные скобки, один параметр).

list.forEach(element -> System.out.println(element.toString)); //element is of unknown type

Var Type

Неизвестный тип, введенный объявлением переменной, определяющей ключевое слово 'var'.

var variable = list.get(0);
2 голосов
/ 17 января 2016

Примитивы и ссылки

Первый: -

Примитивные типы - это основные типы данных: byte, short, int, long, float, double, boolean, char. Примитивные переменные хранят примитивные значения. Ссылочные типы - это любой инстанцируемый класс, а также массивы: String, Scanner, Random, Die, int[], String[] и т. Д. В ссылочных переменных хранятся адреса в ячейках памяти, где хранятся данные.

Второй: -

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

Подробнее: http://javarevisited.blogspot.com/2015/09/difference-between-primitive-and-reference-variable-java.html#ixzz3xVBhi2cr

1 голос
/ 09 января 2012

Краткий ответ: примитивы - это типы данных, а ссылки - это указатели, которые не хранят свои значения, но указывают на их значения и используются в / с объектами.

Primatives

булево

символ

байт

короткий

целое число

длинный

поплавок

двойной

Множество хороших ссылок, объясняющих эти основные понятия. http://www.javaforstudents.co.uk/Types

...