Рубрики

Классы примитивных оболочек неизменны в Java

Рассмотрим ниже программу Java.

// Java-программа для демонстрации этого примитива
// классы-обертки неизменны

class Demo

{

    public static void main(String[] args)

    {

        Integer i = new Integer(12);

        System.out.println(i);

        modify(i);

        System.out.println(i);

    }

  

    private static void modify(Integer i)

    {

        i = i + 1;

    }

}

Выход :

12
12

Параметр i является ссылкой в modify и ссылается на тот же объект, что и i в main (), но изменения, внесенные в i, не отражаются в main (), почему?

Объяснение:
Все примитивные классы-обертки (Integer, Byte, Long, Float, Double, Character, Boolean и Short) являются неизменяемыми в Java, поэтому такие операции, как сложение и вычитание, создают новый объект, а не изменяют старый.

Приведенная ниже строка кода в методе модификации работает с классом-оболочкой Integer, а не с int

я = я + 1;

Это делает следующее:

  1. Распаковать i в значение int
  2. Добавьте 1 к этому значению
  3. Поместите результат в другой объект Integer
  4. Присвойте полученное целое число i (тем самым изменив объект, на который я ссылаюсь)

Поскольку ссылки на объекты передаются по значению, действие, выполненное в методе изменения, не изменяет i, который использовался в качестве аргумента в вызове для изменения. Таким образом, основная процедура все еще печатает 12 после возврата метода.

Эта статья предоставлена Йогешем Доши . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Классы примитивных оболочек неизменны в Java

0.00 (0%) 0 votes