В чем разница между примитивными и ссылочными типами?

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

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

9 ответов


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

  • boolean
  • байт
  • short
  • char
  • int
  • долго
  • float
  • двойной

все другие типы являются ссылочными типами: они ссылаются на объекты.

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


из книги OCA JAVA SE 7

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

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

enter image description here


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

  • предопределено языком и названо ключевым словом
  • общие = 8
    boolean
    char
    байт
    short
    целое число
    долго
    float
    двойной

Ссылочные / Объектные Типы Данных:

  • создано с использованием определенных конструкторов классов
  • используется для доступа к объектам
  • значение по умолчанию любая ссылочная переменная равна null
  • ссылочная переменная может использоваться для ссылки на любой объект объявленного типа или любой совместимый тип.

короче, На самом низком уровне у нас есть группа примитивных типов, таких как "byte, short, int, long, float, double, boolean, char" и ссылочные типы в основном предназначены для группировки примитивных типов вместе. Таким образом, вы можете иметь группу int как список, группу char как строку, класс примитивов и т. д.

другим важным фактором является примитивный тип, содержащий значение и адрес хранения ссылки.

int item = 3;
int item2 = item;

сделать item2 держать значение 3 по-прежнему. Но для ссылочного типа скажи

Point p = new Point(1.0, 2.0);
Point q = p;

q будет содержать адрес объекта p и в VM его еще одну точку. Аналогично, адрес передается методам для ссылочного типа, тогда как значение будет передано для примитивного типа. Большинство других различий также связаны со значением и адресом.


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

  • boolean
  • символ
  • байт
  • short
  • целое
  • долго
  • float
  • двойной

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

Это самое главное отличие


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

приматывается:

boolean

символ

байт

short

целое

долго

float

двойной

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


примитивов и ссылок

первый :-

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

второй:-

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

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


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

Примитивного Типа

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

11

Ссылка Типа

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

Integer

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

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

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

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

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

Тип Void

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

void method();

Тип Null

единственное представление - "null". Он используется особенно во время вычислений типа interference. Null-особый случай логически принадлежащий любому типу (может быть присвоен любой переменной любого типа), но фактически не считается экземпляром любого типа (например, (null instanceof Object) = = false).

null

Тип Союза

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

catch(IllegalStateException | IOException e) {}

Тип Вмешательства

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

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

Неизвестного Типа

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

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

Тип Var

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

var variable = list.get(0);

  1. Java имеет восемь примитивных типов: int, double, float, long, short, byte, char, boolean. Это означает, что программист не может определить новый тип примитива.
  2. ссылочный тип определяется пользователем, поэтому их неограниченное количество. 4 основными ссылочными типами java являются: классы, интерфейсы, массивы, перечисления.
  3. примитивные типы представляют собой отдельные значения. Ссылочные типы агрегатные типы, содержащие ноль или более примитивных значений или объектов.
  4. примитивные типы требуется от одного до восьми байтов памяти. Когда примитивное значение хранится в переменной или передается методу, компьютер делает копию байтов и удерживает значения. Объекты, с другой стороны, могут потребовать больше памяти.