Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   java integer (https://javascript.ru/forum/server/10962-java-integer.html)

Shaci 31.07.2010 00:00

java integer
 
Вопрос про java, может кто знает

Иногда в java переменные простых типов вроде int необходимо преобразовывать в объекты. Все простые типы имеют аналоги в виде классов, например тип int имеет аналог Integer, такие классы наз-ют объектными оболочками.
В различных случаях возможно преобразование объекта в простой тип и обратно.
Например, можно присвоить объект Integer переменной int
Код:

Integer obj = 4;
int var = obj;//теперь int = 4

Здесь целочисленное значение будет автоматически извлечено из объекта.
Теперь пример
Код:

public class ManagerTest {
    public static void main(String[] args) {
        //создпли объект
        Integer int1 = 90;
        //здесь компилятор автоматически извлечет целое число из объекта
        //увеличит его и снова поместит в объект
        int1++;

        System.out.println(int1);// отпечатает 91
        //создадим новую переменную
        Integer n = int1;
        // и переменная n и int1 будут ссылаться на один и тот же объект  //=>условие выполнится
        if (n == int1) System.out.println("objects");

        n++;
        System.out.println(n);//92
        System.out.println(int1);//91 - ???????? почему не 92
    }
}


Gvozd 31.07.2010 00:28

Если мне не изменя
Цитата:

Сообщение от Shaci
// и переменная n и int1 будут ссылаться на один и тот же объект //=>условие выполнится

проверьте с помощью equals
я полагаю, это все-таки различные объекты

Shaci 31.07.2010 01:02

Вот что мне на javatalks сказали:
Цитата:

Объекты-обертки, такие как Integer - они immutable, что значит, что они не могут быть изменены. Вообще. Поэтому во время инкремента на самом деле создается новый объект Integer и присваивается ссылке, таким образом после второго инкремента ссылки n и int1 указывают на разные объекты.
Каждый инкремент приводит к созданию нового объекта, это всё объясняет.


Часовой пояс GMT +3, время: 12:25.