Подтвердить что ты не робот

Что такое .intValue() в Java?

В чем разница между ними?

l является arraylist типа Integer.

версия 1:

int[] a = new int[l.size()];
for (int i = 0; i < l.size(); i++) {
    a[i] = l.get(i);
}
return a;

версия 2:

int[] a = new int[l.size()];
for (int i = 0; i < l.size(); i++) {
    a[i] = l.get(i).intValue();
}
return a;
4b9b3361

Ответ 1

l.get(i); вернет Integer, а затем вызовет intValue(); на нем вернет целое число как type int.

Преобразование int в Integer называется бокс.
Преобразование Integer в int называется распаковкой
И так далее для преобразования между другими примитивными типами и соответствующими классами Wrapper.

Начиная с java 5, он автоматически выполнит необходимые для вас преобразования (автобоксинг), поэтому при использовании Java 5 или более поздней версии нет разницы в ваших примерах. Единственное, что вам нужно ухаживать, это, если Integer имеет значение null, и вы напрямую назначаете его int, тогда он будет генерировать исключение NullPointerException.

До java 5 сам программист должен был делать бокс/распаковку.

Ответ 2

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

Ответ 3

Объект, возвращаемый l.get(i), является экземпляром класса Integer.

intValue() - это метод экземпляра класса Integer, который возвращает примитив int.

См. справочный документ Java... http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#intValue()

Ответ 4

Java поддерживает два типа структур, которые сначала являются примитивами, а вторыми являются объекты.

Метод, который вы запрашиваете, используется для извлечения значения из объекта в примитив.

Все типы java, которые представляют число, расширяют класс Number. Эти методы в какой-то степени устарели, если вы используете тот же примитив и тип объекта, поскольку [autoboxing] был реализован в Java 1.5.

int - примитивный

Целое - объект

До Java 1.5 мы были вынуждены писать

int i = integer.intValue();

так как Java 1.5 мы можем написать

int i = integer;

Эти методы также используются, когда нам нужно изменить наш тип от Integer до long

long l = integer.longValue();

Ответ 5

get(i) вернет объект Integer и получит его значение при вызове intValue(). В первом случае произойдет автоматическое auto-unboxing.

Ответ 6

Это просто удобный метод получения примитивного значения из объекта Number: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Number.html

Рассмотрим код:

Integer integerValue = Integer.valueOf(123);
float floatValue = integerValue.floatValue();

Последняя строка - удобный способ:

float floatValue = (float)(int)integerValue;

Так как любой числовой тип в Java может быть явно добавлен к любому другому примитивному числовому типу, класс Number реализует все эти преобразования. Как обычно, некоторые из них не имеют большого смысла:

Integer integerValue = Integer.valueOf(123);
int intValue = integerValue.intValue();
int intValue2 = (int)integerValue;
int intValue3 = integerValue;

Ответ 7

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

Ответ 8

Рассмотрим этот пример:

Integer i = new Integer(10);
Integer j = new Integer(10);
if (!(i == j)) {
    System.out.println("Surprise, doesn't match!");
}
if (i.intValue() == j.intValue()) {
    System.out.println("Cool, matches now!");
}

который печатает

Surprise, doesn't match!
Cool, matches now!

Это доказывает, что intValue() имеет большое значение. Тем более, что Java не позволяет хранить примитивные типы непосредственно в контейнерах, и очень часто нам нужно сравнивать значения, хранящиеся в них. Например:

oneStack.peek() == anotherStack.peek() 

не работает так, как мы обычно ожидаем, в то время как приведенный ниже оператор выполняет свою работу, очень похоже на обходной путь:

oneStack.peek().intValue() == anotherStack.peek().intValue()