Является ли int объектом в Java?

Точнее, это часть класса Integer (урезанная версия или что-то в этом роде) или это что-то совсем другое?

Я знаю, что int — это тип значения, а Integer — ссылочный тип, но в любом случае int наследуется от Object?

(Я предполагаю, что в этом отношении int, long, boolean и т. д. все похожи. int был выбран просто для удобства)


person soandos    schedule 09.10.2011    source источник


Ответы (4)


  • Базовые типы в Java не являются объектами и не наследуются от Object.

  • Поскольку в Java 1.5 введена разрешенная автоматическая упаковка между int и Integer (и другими типами).

  • Поскольку целые числа не являются объектами, которые нельзя использовать в качестве параметров универсального типа, например, T в list<T>

person mikek3332002    schedule 09.10.2011

Из "Примитивные типы данных": "Примитивные типы — это специальные типы данных, встроенные в язык ; они не являются объектами, созданными из класса». Это, в свою очередь, означает, что нет, int никоим образом не наследуется от java.lang.Object, потому что это делают только «объекты, созданные из класса». Рассмотреть возможность:

int x = 5;

Чтобы вещь с именем x наследовала от Object, эта вещь должна иметь тип. Обратите внимание, что я различаю сам x и то, что он называет. x имеет тип int, но вещь с именем x является значением 5, которое само по себе не имеет типа. Это не что иное, как последовательность битов, представляющая целочисленное значение «5». Напротив, рассмотрим:

java.lang.Number y = new java.lang.Integer(5);

В этом случае y имеет тип Number, а вещь с именем y имеет тип Integer. Вещь с именем y является объектом. Он имеет отдельный тип независимо от y или чего-то еще.

person Ryan Stewart    schedule 09.10.2011
comment
У меня есть сомнения - может ли метод, возвращаемый типом которого является Object, на самом деле возвращать int? Если да, то как мне вернуть int из Object в вызывающей среде? - person Karan Chadha; 23.08.2017
comment
@KaranChadha Вы должны опубликовать это как новый вопрос, а не комментарий. Однако не забудьте проверить, не задавался ли ранее такой же вопрос. - person Ryan Stewart; 23.08.2017

Если вы говорите о Integer:

Класс Integer упаковывает значение примитивного типа int в объект. Объект типа Integer содержит одно поле типа int.

Кроме того, этот класс предоставляет несколько методов для преобразования int в String и String в int, а также другие константы и методы, полезные при работе с int.

int не объект, это примитивный тип.

person Racooon    schedule 09.10.2011
comment
Значит, он не наследуется от объекта? - person soandos; 09.10.2011
comment
@soandos: он наследуется от ничего. Он не может наследовать период, поскольку примитивы не являются ссылочными типами. Это похоже на простые типы C#. - person Hovercraft Full Of Eels; 09.10.2011
comment
В других языках структуры могут наследоваться, поэтому простого факта, что это примитив, недостаточно. - person soandos; 09.10.2011
comment
@soandos - я не знаю ни одной спецификации языка, которая вызывала бы примитивные типы структур. Структурный тип — это сконструированный тип. Но в любом случае обобщать понятия и терминологию с одного языка на другие не совсем правильно. Чтобы по-настоящему понять язык, вам нужно понять, как он определяет свою терминологию. - person Stephen C; 09.10.2011
comment
У меня есть сомнения - может ли метод, тип возвращаемого значения которого Object, на самом деле вернутьint? Если да, то как мне вернуть int из Object в вызывающей среде? - person Karan Chadha; 23.08.2017

Примитивные типы не являются объектами, а хранятся непосредственно в любом контексте, в котором они необходимы. Если с ними нужно обращаться как с объектом, их можно упаковать в Integer.

person siride    schedule 09.10.2011
comment
Итак, вы говорите, что объект = ссылочный тип? - person soandos; 09.10.2011
comment
@soandos: да. Все экземпляры классов в Java являются ссылочными типами. - person siride; 09.10.2011