
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдж рдбреЗрд▓реА рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл
рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рдХреНрдд рдЦрд░рд╛рдм рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИрдВ:
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
рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдРрд╕реЗ рдХреЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ
ConstantHolder
рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛):
static {
рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ
false
рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рдРрд╕рд╛ рдХреНрдпреЛрдВ?
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рд░рдВрддрд░ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред рдЬрдм
int
рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ
value
рдлрд╝реАрд▓реНрдб рдХреЛ
Integer
-рдП рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рд╕реЗ рд╣рдордиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдореВрд▓реНрдп рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдирд╣реАрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ рдЬреИрд╕реЗ
Integer someInteger = 42;
рдФрд░ рдлрд┐рд░ рдЗрд╕
someInteger
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп
рдореБрдХреНрдХреЗрдмрд╛рдЬреА / рдмреЙрдХреНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рди 9000 рд╣реЛ
рдЬрд╛рдПрдЧрд╛ ред рдпрд╣реА рд╣реИ,
Integer.valueOf(anInt)
рд╡рд┐рд╢рд┐рд╖реНрдЯ
anInt
рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ
anInt
ред
рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдХреЛрдИ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рдирд╛рд░рд╛рдЬ рди рдХрд░реЗрдВ :)