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

#java #inheritance #primitive

#java #наследование #примитив

Вопрос:

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

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

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

Ответ №1:

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

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

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

Ответ №2:

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

 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 или чего-либо еще.

Комментарии:

1. У меня есть сомнение — может ли метод, возвращаемый тип которого является an Object , на самом деле возвращаться int ? Если да, то как я могу получить int обратную связь из Object вызывающей среды?

2. @KaranChadha Вы должны опубликовать это как новый вопрос вместо комментария. Не забудьте проверить, задавался ли тот же вопрос ранее.

Ответ №3:

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

Комментарии:

1. Итак, вы говорите, что object = ссылочный тип?

2. @soandos: да. Все экземпляры класса в Java являются ссылочными типами.

Ответ №4:

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

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

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

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

Комментарии:

1. Значит, он не наследуется от object ?

2. @soandos: он наследует из ничего . Он не может наследовать period, поскольку примитивы не являются ссылочными типами. Это похоже на простые типы C #.

3. В других языках структуры могут наследоваться, поэтому простого факта, что это примитив, недостаточно

4. @soandos — я не знаю ни одной языковой спецификации, которая вызывала бы структуры примитивных типов. Тип структуры — это сконструированный тип. Но в любом случае, обобщение понятий и терминологии с одного языка на другие не совсем разумно. Чтобы действительно понять язык, вам нужно понять, как он определяет свою терминологию.

5. У меня есть сомнение — может ли метод, возвращаемый тип которого является an Object , на самом деле возвращаться int ? Если да, то как я могу получить int обратную связь из Object вызывающей среды?

Ответ №5:

  1. Объект имеет состояние и поведение
  2. состояние означает поля (переменные)
    , например: велосипед (текущая скорость, текущая передача)
  3. поведение означает методы для изменения этих полей, например: изменение текущей скорости с помощью методов
  4. Только представьте, можете ли вы изменить состояние int, если вы измените, вы могли бы сказать, что int является объектом. мы не можем изменить, чтобы он не был объектом