Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 13
1

Integer 127 & 128 - как и почему это происходит?

05.09.2018, 15:53. Показов 3302. Ответов 5

Всем привет!

Вот уже неделю ломаю голову над не сложным проектом, в котором
в одном месте сравниваются элементы двух массивов. Большая часть
кода писалась не мной, но именно мне пришлось искать в нем ошибки.
Основной код приводить не буду, ошибку искал очень долго, так как на
первый взгляд все в коде было написанно идеально, но половина элементов
(примерно) идентичных массивов сравнивалась верно, а вот со второй все
плохо. Позже разбирая код подетально в отдельной от проекта классе
нашел я это проблемное место. Исправляется оно элементарно, но вот
на вопрос "Почему это так работает?" я ответить не смог.
Пожалуйста объясните почему оно так происходит

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public static void main(String[] args) {
        int i0 = 3;
        int i1 = 3;
 
        Integer I0 = 3;
        Integer I1 = 3;
 
        System.out.println("(i == i): " + (i0 == i1));
        System.out.println("(i == I): " + (i0 == I0));
        System.out.println("(I == I): " + (I0 == I1));
        System.out.println("(I eq i): " + (I0.equals(i0)));
        System.out.println("(I eq I): " + (I0.equals(I1)));
 
        Integer p1 = 127;
        Integer p2 = 127;
        System.out.println("Причуды java:(Integer) 127 == 127 " + (p1 == p2));  //TRUE
 
        Integer q1 = 128;
        Integer q2 = 128;
        System.out.println("Причуды java:(Integer) 128 == 128 " + (q1 == q2));  //FALSE
    }
Привел полный код метода из которого проверял частные случаи, вопрос
вызывают последние два вывода. Почему они выдают разные значения?
(что они выводят - в комментарии)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2018, 15:53
Ответы с готовыми решениями:

Как в signed char помещается диапазон -128,127 ведь если 127 это 01111111, то -127 должно быть 11111111
Добрый вечер! ломаю голову над тем, как в signed char помещается диапазон -128,127 ведь если 127...

Почему так происходит и как это устранить
почему если я напишу вот так - #include <stdio.h> #include <iostream> using namespace std; ...

Почему используется *& вместо простого указателя и как это работает?
может кто-нибудь объяснить почему используется *& вместо простого указателя и как это работает?...

printf и integer 128 бит, как вывести значение?
Как напечатать через printf знаковый и беззнаковый 128-битный integer? Пробовал через llu и lllu,...

5
Автоматизируй это!
Эксперт Python
4816 / 3330 / 958
Регистрация: 30.03.2015
Сообщений: 10,382
Записей в блоге: 27
05.09.2018, 16:03 2
mayet, а спросить гугл?
http://www.devx.com/tips/Tip/42276
1
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 13
05.09.2018, 16:10  [ТС] 3
Спасибо за ссылочку на интересный материал, ознакомился, осознал. Но вопрос остается, почему оно так сделано?
0
Эксперт Java
3240 / 2699 / 825
Регистрация: 05.07.2013
Сообщений: 12,915
05.09.2018, 16:36 4
Цитата Сообщение от mayet Посмотреть сообщение
почему оно так сделано
по кочану. Объекты сравнивай equals. О другом вредно думать.
1
Автоматизируй это!
Эксперт Python
4816 / 3330 / 958
Регистрация: 30.03.2015
Сообщений: 10,382
Записей в блоге: 27
05.09.2018, 16:50 5
mayet, как и пул строк -полагаю для оптимизации, хотя есть варианты. Именно эти целые числа используются чаще всего
1
2083 / 1641 / 406
Регистрация: 17.02.2014
Сообщений: 8,119
05.09.2018, 19:32 6
Лучший ответ Сообщение было отмечено mayet как решение

Решение

Цитата Сообщение от mayet Посмотреть сообщение
почему оно так сделано?
https://stackoverflow.com/ques... g-to-integ
тут популярно
http://www.javacjava.com/IntegerEquals.html
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2018, 19:32

На промежутке от -128 до 127 подсчитать пар чисел, удовлетворяющих условию
Здравствуйте. Я плохо дружу с ассемблером. Код на задачу нашел здесь на форуме, но не совсем смог...

Типы: почему если прибавить единицу к char, получится 128, а не -128?
Если мы прибавляем 1 к максимальному значению unsigned int - результат "0". Тогда почему если...

Почему это происходит в JavaScript?
Ребята, help, I need somebody's help. Есть некая функция простая, создающая динамический...

8-битовый тип signed char может представлять значения от -128 до 127
8-битовый тип signed char может представлять значения от -128 до 127 Кто может растолковать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.