Пару слов о Джаве
У ДиБРа увидел прекрасное. Как вы думаете, что выведет следующий код:
public class Main {
public static void main(String[] args) {
Integer a = 10, b = 10;
Integer c = 150, d = 150;
System.out.println(a == b);
System.out.println(c == d);
}
}Как ни странно, но «true» и «false». Насколько я понял по комментариям, это происходит
Комментарии 19
Процитируй
System.out.print(«H» + «a»);
System.out.print('H' + 'a');
-- 1.
System.out.println((int) (char) (byte) -1);
-- 2.
int j = 0;
for (int i = 0; i < 100; i++)
j = j++;
System.out.println(j);
-- 3.
int i = 0;
while (i == i + 1) { }
--
Это простые, там есть и с многопоточностью, с классами, со стандартной библиотекой… Не могу найти с тернарным оператором, там неявное приведение типов забавное.
Интересно, конечно!
1. 'H' + 'a' — сложение двух чисел, «H» + «a» — сложение двух строк.
2. (int) (char) (byte) -1 = 65535
3. j = 0, особенность работы с постинкрементом и присваиванием (оно раскрывается в int tmp = j; j = j + 1; j = tmp;). Там еще куча с инкрементами есть, все не упомню :)
4. вполне очевидно, что цикл быстро закончится. Но если правильно объявить i (не «int i = 0», а «double i = Double.POSITIVE_INFINITY»), то цикл превратится в бесконечный.
Из секретных источников (на самом деле на JavaOne рассказали) стало известно, что в
А если серьёзно, то пару раз нарвавшись на подобные вещи, быстро привыкаешь смотреть в исходники стандартных пакетов. У
В CPython, кстати, тоже статически выделена память для маленьких чисел (у меня в 2.7 это диапазон
А в Jython подобный диапазон
Работает подобный пример, только, естественно, с оператором «is» вместо «==».
В том же духе в CPython, например, переиспользуются строки, встречаемые в коде (имена классов, методов, переменных, ключевые слова, etc).