войти зарегистрироваться

JAVAНесколько неожиданное поведение кеширования при boxing-е

Недавно на The Daily WTF писали о том, как с помощью Reflection можно неплохо подпортить кровь коллегам.

Допустим, у вас есть следующий код:

public class ConstantHolder {
	public static final Integer THE_ANSWER_TO_LIFE_THE_UNIVERSE_AND_EVERYTHING = 42;
}
и
public class TestBoxingVulnerability {
	public static void main(String[] args) {
		int theAnswer = ConstantHolder.THE_ANSWER_TO_LIFE_THE_UNIVERSE_AND_EVERYTHING;
		System.out.println(theAnswer == 42);
	}
}


Очевидно, что будет выведено true. Однако в проекте может оказаться такой код, который может изменить ситуацию в обратную сторону. Под катом приведён пример такого кода.