Автоупаковка: Таким образом, я могу записать: Целое число i = 0; вместо: Целое число i = новое Целое число (0);

Ваши скобки неверны. Попробуйте это:

Add-Member -MemberType NoteProperty -Name "Members" -Value (Get-Members 

Ваши скобки неверны. Попробуйте это:

[110]

, что заставит сначала выполнить часть Get-Members и вернуть ее значения свойству -Value из-за квадратных скобок.

Кроме того, я бы порекомендовал вам выбрать другое имя вместо Get-Members, потому что оно слишком близко к очень известному Get-Member командлету.

.IdentityReference) -PassThru

, что заставит сначала выполнить часть Get-Members и вернуть ее значения свойству -Value из-за квадратных скобок.

Кроме того, я бы порекомендовал вам выбрать другое имя вместо Get-Members, потому что оно слишком близко к очень известному Get-Member командлету.

10
задан Harry Quince 20 April 2009 в 00:16
поделиться

9 ответов

Вы вроде немного упростили это.

Автобокс также вступает в игру при использовании коллекций. Как объясняется в java-документации sun:

Коллекции могут содержать только ссылки на объекты, поэтому вы должны поместить примитивные значения в соответствующий класс-оболочку. ... Когда вы берете объект из коллекции, вы получаете целое число, которое вы вставили; если вам нужно int, вы должны распаковать Integer, используя метод intValue. Весь этот бокс и распаковка являются болью и загромождают ваш код. Функция автобоксирования и распаковки автоматизирует процесс, устраняя боль и беспорядок.

Так когда же следует использовать автобокс и распаковку? Используйте их только тогда, когда существует «несоответствие импеданса» между ссылочными типами и примитивами, например, когда вы должны поместить числовые значения в коллекцию. Не рекомендуется использовать автобокс и распаковку для научных вычислений или другой чувствительный к производительности числовой код. Integer не является заменой для int; Автобокс и распаковка стирают различие между примитивными типами и ссылочными типами, но они не устраняют это.

Отличный обзор автобокса.

16
ответ дан 3 December 2019 в 14:00
поделиться

КСТАТИ

Integer i = 0;

эквивалентно

Integer i = Integer.valueOf(0);

Различие в том, что valueOf () не создает новый объект для значения между -128 и 127 (очевидно, это будет настраиваться, если Java 6u14)

8
ответ дан 3 December 2019 в 14:00
поделиться

Он существует для того, чтобы вы могли писать код, подобный

List<Integer> is = new ArrayList<Integer>();
is.add(1); // auto-boxing
is.add(2);
is.add(3);

int sum = 0;
for (int i : is)  // auto-unboxing
{
    sum += i;
}

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

Помните, что Long отличается от того же значения, что и Integer (используя equals ()), но как long он равен int (используя ==).

5
ответ дан 3 December 2019 в 14:00
поделиться

Это идея, да. Тем не менее, еще удобнее иметь возможность присваивать целое число целому.

Можно утверждать, что автобокс направлен на симптом, а не на причину. Истинный источник путаницы заключается в том, что система типов Java противоречива: потребность в примитивах и ссылках на объекты является искусственной и неудобной. Автобокс несколько смягчает это.

3
ответ дан 3 December 2019 в 14:00
поделиться

С моей циничной шляпой: наверстать ограничения на оригинальная Java (я имею в виду Дуб здесь) спец. Не только в первый раз.

2
ответ дан 3 December 2019 в 14:00
поделиться

Делает код более читабельным и аккуратным. Особенно, если вы выполняете операции (поскольку в Java нет перегрузки операторов).

1
ответ дан 3 December 2019 в 14:00
поделиться

Из того, что я помню из прочтения «Эффективной Явы» Джошуа Блоха, вы должны рассмотреть примитивы над их коробочными аналогами. Автобокс без учета его побочных эффектов может вызвать проблемы.

1
ответ дан 3 December 2019 в 14:00
поделиться

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

1
ответ дан 3 December 2019 в 14:00
поделиться

Основным преимуществом будет удобочитаемость, в основном синтаксический сахар. Java уже очень многословна, Sun пытается всеми способами сократить синтаксис.

1
ответ дан 3 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: