Re[3]: Boolean и его замыкания
От: vsb Казахстан  
Дата: 03.05.20 09:34
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

GIV>>Второе.


PD>Гм.


PD>
PD>public final class Boolean implements java.io.Serializable, Comparable<Boolean>
PD>//...
PD>    private final boolean value;
PD>//...
PD>    public Boolean(boolean value) {
PD>        this.value = value;
PD>    }
PD>    public Boolean(String s) {
PD>        this(parseBoolean(s));
PD>    }


PD>


PD>Вполне обычный боксинг.


PD>Boolean b = false;


PD>===


PD>Boolean b = new Boolean(false);


Это не так. Это эквивалентно Boolean b = Boolean.valueOf(false);
Re[4]: Boolean и его замыкания
От: Pavel Dvorkin Россия  
Дата: 03.05.20 11:16
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Это не так. Это эквивалентно Boolean b = Boolean.valueOf(false);


М-да. Сэкономить решили. Ну, в общем, правильно. Я просто полагал, что делается по аналогии с другими типами — оболочками.
With best regards
Pavel Dvorkin
Re[5]: Boolean и его замыкания
От: vsb Казахстан  
Дата: 03.05.20 11:21
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

vsb>>Это не так. Это эквивалентно Boolean b = Boolean.valueOf(false);


PD>М-да. Сэкономить решили. Ну, в общем, правильно. Я просто полагал, что делается по аналогии с другими типами — оболочками.


С другими типами тоже valueOf() (: Причём по умолчанию тот же Integer от -128 до 127 тоже кешируется. Поэтому всякие приколы возникают вида

        Integer n1 = 100;
        Integer n2 = 100;
        System.out.println(n1 == n2); // true
        n1 = 1000;
        n2 = 1000;
        System.out.println(n1 == n2); // false
Re[6]: Boolean и его замыкания
От: Pavel Dvorkin Россия  
Дата: 03.05.20 11:23
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>С другими типами тоже valueOf() (: Причём по умолчанию тот же Integer от -128 до 127 тоже кешируется. Поэтому всякие приколы возникают вида


Да, сейчас посмотрел и хотел об этом упомянуть, отредактировав свое сообщение.
With best regards
Pavel Dvorkin
Re[4]: Boolean и его замыкания
От: Pavel Dvorkin Россия  
Дата: 03.05.20 11:27
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Есть боксинг а есть аутобоксинг, немного разные вещи


Дело не в этом, а в реализации valueOf, как верно отметил vsb

Integer v = i;

public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

приведет к вызову конструктора при !(i >= IntegerCache.low && i <= IntegerCache.high), а иначе так же, как и Boolean
With best regards
Pavel Dvorkin
Re[5]: Boolean и его замыкания
От: GarryIV  
Дата: 03.05.20 13:06
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

GIV>>Есть боксинг а есть аутобоксинг, немного разные вещи


PD>Дело не в этом, а в реализации valueOf, как верно отметил vsb


PD>Integer v = i;


Ну да, у интов по другому.
WBR, Igor Evgrafov
Re[2]: Boolean и его замыкания
От: StanislavK Великобритания  
Дата: 05.05.20 06:53
Оценка:
Здравствуйте, GarryIV, Вы писали:

F2>>Откуда следует ответ на предыдущий вопрос? Он прописан в стандарте (я его не читал еще, разбираюсь же только), или зависит от реализации?

GIV>Хз, должно быть прописано. Искать влом.

Не, точно не прописано. Это просто оптимизация.
Re[3]: Boolean и его замыкания
От: GarryIV  
Дата: 05.05.20 09:31
Оценка:
Здравствуйте, StanislavK, Вы писали:

F2>>>Откуда следует ответ на предыдущий вопрос? Он прописан в стандарте (я его не читал еще, разбираюсь же только), или зависит от реализации?

GIV>>Хз, должно быть прописано. Искать влом.

SK>Не, точно не прописано. Это просто оптимизация.


https://docs.oracle.com/javase/specs/jls/se14/html/jls-5.html#jls-5.1.7

If the value p being boxed is the result of evaluating a constant expression (§15.29) of type boolean, byte, char, short, int, or long, and the result is true, false, a character in the range '\u0000' to '\u007f' inclusive, or an integer in the range -128 to 127 inclusive, then let a and b be the results of any two boxing conversions of p. It is always the case that a == b

WBR, Igor Evgrafov
Re[4]: Boolean и его замыкания
От: StanislavK Великобритания  
Дата: 05.05.20 15:03
Оценка: +1
Здравствуйте, GarryIV, Вы писали:

SK>>Не, точно не прописано. Это просто оптимизация.


GIV>https://docs.oracle.com/javase/specs/jls/se14/html/jls-5.html#jls-5.1.7

GIV>

GIV>If the value p being boxed is the result of evaluating a constant expression (§15.29) of type boolean, byte, char, short, int, or long, and the result is true, false, a character in the range '\u0000' to '\u007f' inclusive, or an integer in the range -128 to 127 inclusive, then let a and b be the results of any two boxing conversions of p. It is always the case that a == b


И правда, наврал я. Зря они так, я бы это максимум рекомендацией сделал, как бы детали реализации.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.