В чем разница между int и Integer в Java и C #? - PullRequest
244 голосов
/ 03 августа 2008

Я читал Еще Джоэл о программном обеспечении , когда я наткнулся на Джоэл Спольски , говоря что-то о конкретном типе программиста, знающего разницу между int и Integer в Java / C # (объектно-ориентированные языки программирования).

Так в чем же разница?

Ответы [ 25 ]

8 голосов
/ 05 августа 2008

Это уже было дано для Java, вот ответ C #:

"Integer" не является допустимым именем типа в C #, а "int" является просто псевдонимом для System.Int32. Кроме того, в отличие от Java (или C ++), в C # нет специальных примитивных типов, каждый экземпляр типа в C # (включая int) является объектом. Вот пример демонстрационного кода:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}
7 голосов
/ 17 мая 2014

Вы когда-либо программировали до этого момента (int) - это один из примитивных типов, которые вы можете установить для своих переменных (например, char, float, ...).

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

int x;
Integer y; 

x и y обе являются переменными типа int, но y упакован в класс Integer и имеет несколько используемых вами методов, но в случае, если вам нужно вызвать некоторые функции класса-оболочки Integer, вы можете сделать это просто.

Integer.toString(x);

но помните, что x и y являются corect, но если вы хотите использовать их просто как примитивный тип, используйте простую форму (используется для определения x).

7 голосов
/ 06 августа 2008

Еще одна вещь, которую я не вижу в предыдущих ответах: В Java примитивные классы-обертки, такие как Integer, Double, Float, Boolean ... и String, предполагаются инвариантными, поэтому при передаче экземпляра этих классов вызываемый метод не может каким-либо образом изменять ваши данные, в опозиции с большинством других классов, чьи внутренние данные могут быть изменены его открытыми методами. Так что в этих классах есть только методы «getter», кроме «setters», кроме конструктора.

В java-программе строковые литералы хранятся в отдельной части памяти кучи, только для литерала, чтобы сэкономить память, многократно используя эти экземпляры

7 голосов
/ 13 июня 2016

Java:

int, double, long, byte, float, double, short, boolean, char - примитивы. Используется для хранения основных типов данных поддерживается языком. примитивные типы не являются частью Иерархия объектов, и они не наследуют Object. Это нельзя передать ссылкой на метод.

Double, Float, Long, Integer, Short, Byte, Character и Boolean, являются упаковщиками типа, упакованными в java.lang. Все оболочки числовых типов определяют конструкторы, которые позволяют объекту быть построенным из данного значения или строкового представления этого значения. Использование объектов может добавить накладные расходы даже к самым простым расчетам.

Начиная с JDK 5, Java включала в себя две очень полезные функции: автобокс и автобокс. Автобокс / распаковка значительно упрощает и оптимизирует код, который должен преобразовывать примитивные типы в объекты, и наоборот.

Пример конструкторов:

Integer(int num)
Integer(String str) throws NumberFormatException
Double(double num)
Double(String str) throws NumberFormatException

Пример упаковки / распаковки:

class ManualBoxing {
        public static void main(String args[]) {
        Integer objInt = new Integer(20);  // Manually box the value 20.
        int i = objInt.intValue();  // Manually unbox the value 20
        System.out.println(i + " " + iOb); // displays 20 20
    }
}

Пример автобокса / автобокс:

class AutoBoxing {
    public static void main(String args[]) {
        Integer objInt = 40; // autobox an int
        int i = objInt ; // auto-unbox
        System.out.println(i + " " + iOb); // displays 40 40
    }
}

P.S. Книга Герберта Шильдта была взята за основу.

4 голосов
/ 26 ноября 2015

Переменная int содержит 32-разрядное целое число со знаком. Integer (с заглавной I) содержит ссылку на объект (класса) типа Integer или на ноль.

Java автоматически приводит между ними; от Integer до int всякий раз, когда объект Integer встречается в качестве аргумента оператора int или назначается переменной int, или значение int присваивается переменной Integer. Этот кастинг называется бокс / распаковка.

Если переменная типа Integer, ссылающаяся на null, распакована, явно или неявно, генерируется исключение NullPointerException.

4 голосов
/ 07 августа 2014

Int и Integer в Java и C # - это два разных термина, используемых для обозначения разных вещей. Это один из примитивных типов данных, который может быть назначен переменной, которая может хранить точно. Одно значение его объявленного типа за раз.

Например:

int number = 7;

Где int - тип данных, назначенный номеру переменной, который содержит значение семь. Так что int - это просто примитив, а не объект.

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

Например:

Integer number = new Integer(5);
4 голосов
/ 17 июля 2014

На обоих языках (Java и C #) int - 4-байтовое целое число со знаком.

В отличие от Java, C # предоставляет целые значения со знаком и без знака. Поскольку Java и C # являются объектно-ориентированными объектами, некоторые операции в этих языках не отображаются непосредственно на инструкции, предоставляемые во время выполнения, и поэтому должны быть определены как часть объекта некоторого типа.

C # обеспечивает System.Int32, который является типом значения, использующим часть памяти, которая принадлежит ссылочному типу в куче.

Java предоставляет java.lang.Integer, который является ссылочным типом, работающим на int. Методы в Integer не могут быть скомпилированы напрямую для инструкций времени выполнения. Таким образом, мы упаковываем значение int для преобразования его в экземпляр Integer и используем методы, которые ожидают экземпляр некоторого типа (например, toString(), parseInt() , valueOf() и т. Д.).

В C # переменная int ссылается на System.Int32.Any 4-байтовое значение в памяти можно интерпретировать как примитив int, которым можно манипулировать с помощью экземпляра System.Int32.So int - это псевдоним для System.Int32.When с использованием целочисленных методы типа int.Parse(), int.ToString() и т. д. Integer компилируется в структуру FCL System.Int32, вызывая соответствующие методы, такие как Int32.Parse(), Int32.ToString().

4 голосов
/ 27 апреля 2017

В Java тип int является примитивным типом данных, где тип Integer является объектом.

В C # тип int также является типом данных, аналогичным System.Int32. integer (так же, как и любые другие типы значений) может быть упакован ("обернут") в объект.

3 голосов
/ 03 июня 2019

int - это примитивный тип данных. Integer - это класс-оболочка. Он может хранить данные int как объекты.

3 голосов
/ 28 февраля 2016

В Java int является примитивным типом данных, а Integer является классом Helper, он используется для преобразования одного типа данных в другой.

Например:

double doubleValue = 156.5d;
Double doubleObject  = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();

Примитивные типы данных хранят самую быструю доступную память, где класс Helper сложен, и хранятся в памяти heep.

справка из "Essential Training" Дэвида Гасснера ".

...