объявление / инициализация примитивов, равных созданию новых объектов - PullRequest
4 голосов
/ 20 мая 2010

декларирует / инициализирует примитивы так же, как создание новых объектов? Из того, что я знаю, когда мы создаем примитивы, мы также создаем классы-обертки для них. Я реализую на Java, кстати.

Ответы [ 5 ]

5 голосов
/ 20 мая 2010

Нет, назначение значений примитивов не создает какие-либо объекты.

То, на что вы могли бы ссылаться, это тот факт, что значения примитивов можно автоматически помещать всоответствующие оболочки, когда они используются в контексте, где требуется ссылочный тип (он же «объект»):

int i = 13;     // this line does not create an object
Integer i2 = i; // at this line 13 is auto-boxed into an Integer object

char c = 'x';   // again: no object created:
List<Character> l = new ArrayList<Character>();
l.add(c);       // c is auto-boxed into a Character object

Также я попытаюсь описать разницу между объявлениями и инициализацией:

int i;          // an int-variable is declared
int j = 0;      // an int-variable is declared and initialized
i = 1;          // an int-variable is assigned a value, this is *not* initialization

Переменная «объявляется», когда она создается впервые (т.е. вы указываете тип и имя переменной).Он инициализируется, когда ему присваивается значение во время объявления .

3 голосов
/ 20 мая 2010

Нет, объявление и инициализация примитивной переменной не создает объект. Давайте возьмем класс с двумя целочисленными значениями - одно с использованием типа оболочки, а другое нет.

public class Foo
{
    private int primitive = 10;
    private Integer wrapper = new Integer(10);
}

Значение переменной primitive - это просто число 10. Значение переменной wrapper - это ссылка на объект Integer, который, в свою очередь, содержит число 10. Таким образом, экземпляр Foo будет сохранять состояние для числа в primitive и ссылки в wrapper.

Есть классов-оболочек для всех примитивных типов в Java, но вы не используете их автоматически.

2 голосов
/ 20 мая 2010

Создание примитива НЕ также создает для них класс-оболочку.

Что касается вашего исходного вопроса: объявление / инициализация примитива создаст его в стеке, тогда как объявление объекта выделит переменную для хранения ссылки на объект. Инициализация объекта выделит его в куче.

1 голос
/ 20 мая 2010

Ответ: Нет.

Проверьте это: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html

0 голосов
/ 20 мая 2010

Нет. Примитивы не являются объектами в Java.

...