2013-07-31 1 views
0

Когда я пытаюсь создать новый объект ИНТ:объявление и инициализация Интс, ошибка при вызове конструктора

int g= new int(); 

NetBeans мне говорит:

Incompatible types 
required: int 
found: int[] 
'[' expected 
illegal start of expresion. 

Я хочу, чтобы просто создать новый Int.

+0

Добро пожаловать в SO. Здесь возьмите [тур] (http://stackoverflow.com/about). –

ответ

5

Для примитивных типов данных вы не имеете конструктор:

int g = 5; 

или просто сказать

int g; //declaration 

Но имейте в виду, есть также классы, которые содержат больше функциональность, для каждого примитивного типа данных. Его имя Datatypes написано с первой буквы верхнего регистра:

Integer g = new Integer(5); //but it needs the parameter 

Где, например, иметь функцию, чтобы создать Integer из строки:

Integer.parseInt("5"); 

Но есть на самом деле не так много нужно для их для части декларации.

-1

Это несчастливое дизайнерское решение в Java, что примитивные типы (int - один из них) обрабатываются иначе, чем объекты. Вы не можете использовать new для создания int; Вы относиться к ним так же, как если бы в C, например - просто присвоить значение, не нужно ничего строить:

int foo = 0; 

Обратите внимание, что вы не можете использовать локальные переменные, которые не были инициализированы явно раньше.

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

+0

Вы можете использовать классы, которые я предполагаю.'Integer g = new Integer();' – Breavyn

+0

Хотя, по вашему мнению, это «неудачное» дизайнерское решение, я бы посоветовал хранить ответы на очень простые вопросы Java без мнений. – Eric

+0

Это то, для чего нужен downvote? И это несчастливо. Он укусит разработчиков влево и вправо, это затрудняет производительность (из-за постоянного бокса и распаковки), и, в конце концов, особенно с улучшением компиляторов JIT, это не стоило проблем. Это, конечно, тоже нельзя изменить, но это не значит, что это не было ошибкой в ​​ретроспективе. Компромисс, который оказался не лучшей идеей. – Joey

1

В Java существует два типа int.

Примитивы

int g = 1; 

Объекты

Integer gObject = new Integer(1); 

Там также важная вещь в Java называется Autoboxing. Его неявное преобразование между примитивами и объектами.

Autoboxing

gObject = g; // equivalent to Integer.valueOf(g) 
g = gObject; // equivalent to gObject.intValue() 
0

Вам нужно только «новый» класс или массив для создания конкретного экземпляра класса/массива.«INT» примитивный тип данных, так что вы можете просто использовать его напрямую:

int g; 

g = 10; 

System.out.println("g is: " + g); 

Вы хотите проконсультироваться некоторые вводные Java учебники или книги и работать с основными типами данных и узнать о классах/объектов в более подробно.

Если вместо этого вы хотите, чтобы создать массив из десяти целых чисел, вы бы

int[] g = new int[10]; 

поэтому вы получаете сообщение об ошибке запутанного вы видите.

Удачи вам!

+0

Самое смешное, что я в курсе «Чтение мышления на Java». Что-то о классах и объектах, а также о том, что базовые типы являются особыми в некотором роде, но я не знал, что им не нужен контрструктор. Спасибо!! – user2636738

4

Для примитивов нет конструкторов, поскольку они не являются объектами. Они просто объявляются и инициализируются следующим образом:

int x = num; 

Если вы хотите/должны использовать объект, вы можете использовать обертку Integer:

Integer x = new Integer(num); 

Рассмотрим следующий пример на auto-unboxing and unboxing:

int x_unboxed = new Integer(num); // unboxing 

Integer x_boxed = 5; // autoboxing 

Распаковка происходит от Integer или Wrapper к int или primitive.
Autoboxing происходит от int или primitive до Integer или Wrapper.

В основном a Wrapper является неизменным объектом, который обертывает вокруг primitive. В этом случае Integer содержит private final int.

Возможно, вам потребуется использовать обертку, если, например, вы хотели использовать List, который не может содержать примитивы.

+0

Я верю, что правильный ответ действительно подчеркнуть различия между примитивами и объектами. Может быть, вы могли бы расширить свой ответ с отношением между примитивными типами и связанными с ним объектами и, возможно, даже упомянуть авто-бокс? – Eric

+0

@ EricTobias Я сделал несколько изменений. –

+0

Я видел, спасибо. Я считаю, что все это необходимо для работы с примитивами, когда они новы к Java! ;) – Eric

0

Вы пытаетесь создать целое объект, набрав

int g=new int() 

Это неправильно в Java, так как вы не можете создавать объекты из примитивных типов. Java - это 99% объектно-ориентированный язык. Поскольку он не избавляется от примитивных типов, таких как int, float и т. Д., Вы не можете назвать чисто объектно-ориентированным.

Что вы можете сделать, это просто:

int g; 
    Integer g1=new Integer(g); 

Это было бы удовлетворить ваши потребности целочисленного объекта. Integer - это класс оболочки, который обертывает int g и создает из него объект. Помните, что вы можете использовать новый только в том случае, если вы создаете объект класса, а Integer - это класс, int - не класс.

Удачи вам!

Смежные вопросы