рджрд┐рди рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп!
рдпрд╣ рд▓реЗрдЦ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦрдХ
рджреНрд╡рд╛рд░рд╛ "рдерд┐рдВрдЧреНрд╕ рдпреВ [рд╢рд╛рдпрдж] рдбреЛрдВрдЯ рдиреЙрдЯ рдЕрдмрд╛рдЙрдЯ рдЬрд╛рд╡рд╛" рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдорджреНрджреЗрдирдЬрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВ "рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП" рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реВрдВрдЧрд╛ред рдЙрд╕ рдкрд░ рдкрдврд╝рдирд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдмрд╣реБрдд рд╕реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рд╕реАрдЦреАрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред рд╢рд╛рдпрдж рдпреЗ рдмрд╛рддреЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЙрддреНрд╕реБрдХ рд▓рдЧреЗрдВрдЧреАред
рддрдереНрдп рдЬреЛ, рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ "рд╕реНрдкреЙрдЗрд▓рд░" рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЕрднреА рднреА рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЦреБрдж рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдмреВрд▓рд┐рдпрди.рд╢рд╢рдХреЛрдб (рд╕рдЪреНрдЪрд╛) == 1231 рдФрд░ рдмреВрд▓рд┐рдпрди.рд╢рд╢рдХреЛрдб (рдЕрд╕рддреНрдп) == 1237 рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рддрдХред
рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП- рдмреБрд▓рд┐рдпрди.рд╢рд╢рдХреЛрдб (рд╕рдЪ) == 1231
- рдмреВрд▓рд┐рдпрди.рд╢рд╢рдХреЛрдб (рдЭреВрдареА) == 1237
- Float.hashCode (рдорд╛рди) == Float.floatToIntBits (рдорд╛рди)
- Double.hashCode (рдорд╛рди) - рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ 32-рдмрд┐рдЯ рд╣рд╛рдлрд╝ рдХреЗ xor рдбрдмрд▓.doubleToLongBits (рдорд╛рди)
Object.hashCode () рдЕрдм рдореЗрдореЛрд░реА рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ
рдЕрд╕реНрд╡реАрдХрд░рдг: рдпрд╣ рдУрд░реЗрдХрд▓ (рд╣реЙрдЯрд╕реНрдкреЙрдЯ) рд╕реЗ рдПрдХ рдЬреЗрд╡реАрдПрдо рд╡рд┐рд╡рд░рдг рд╣реИред
рдПрдХ рдмрд╛рд░ рддреЛ рдРрд╕рд╛ рдерд╛редJdk1.2.1 / рдбреЙрдХреНрд╕ / рдПрдкреА / рдЬрд╛рд╡рд╛ / рд▓реИрдВрдЧ / Object.html # рд╣реИрд╢рдХреЛрдб () рд╕реЗ:
рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрд╢рдХреЛрдб рд╡рд┐рдзрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реМрдЯрд╛рддреА рд╣реИред (рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкрддреЗ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдХрдиреАрдХ JavaTM рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред)
рддрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рдпрд╣
javadoc jdk 12 рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред
vladimir_dolzhenko рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ -XX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╣реИрд╢рдХреЛрдб = 4ред рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд╡рдпрдВ рдЬрд╛рд╡рд╛ 1.2 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд▓рдЧрднрдЧ рдерд╛ред
Integer.valueOf (15) == Integer.valueOf (15); Integer.valueOf (128)! = Integer.valueOf (128)
рдЕрд╕реНрд╡реАрдХрд░рдг: рдпрд╣
jls рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрдм рджреЛ рдЖрд╡рд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ == (! =) рд╕рдВрдЪрд╛рд▓рдХ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреЛрдИ рдСрдЯреЛрдмреЙрдХреНрд╕рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпрд╣ рдкрд╣рд▓реА рд╕рдорд╛рдирддрд╛ рд╣реИ рдЬреЛ рднреНрд░рдорд┐рдд рдХрд░рддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП i: -129 <i <128 рдкреВрд░реНрдгрд╛рдВрдХ рдЖрд╡рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреИрд╢реНрдб рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ i рдХреЗ рд▓рд┐рдП, Integer.valueOf (i) рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛, Integer.valueOf (i) рд╣рдореЗрд╢рд╛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рдирд┐рдЧрд░рд╛рдиреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд░реЗрдХ" рдХреЗ рд╕рд╛рдеред
рдУрд░реЗрдХрд▓ (рд╣реЙрдЯрд╕реНрдкреЙрдЯ) рд╕реЗ jvm рдореЗрдВ, рдХреИрд╢рд┐рдВрдЧ рдХреА рдКрдкрд░реА рд╕реАрдорд╛ рдХреЛ
"java.lang.Integer.IntegerCache.high" рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЗ рдЖрджрд┐рдо рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╣ рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдмрдпрд╛рди рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реИред рдЕрд░реНрде рдпрд╣реА рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдпрд╛ рддрд╛рд░ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ,
class AnotherClass { public final static String CASE_1 = "case_1"; public final static String CASE_2 = "case_2"; }
рдЬрдм рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
class TheClass {
рдЗрди рд╕реНрдерд┐рд░рд╛рдВрдХ ("case_1", "case_2") рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдРрд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдореВрд▓реНрдп рдмрджрд▓ рдЧрдП рд╣реИрдВ, рд╣рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдкреБрд░рд╛рдиреЗ рдирд┐рд░рдВрддрд░ рдорд╛рди рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдирд┐рд░рдВрддрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд┐рдЪ / рдХреЗрд╕), рдпрд╛ рд╕рдВрдХрд▓рдХ рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд░рдВрддрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдФрд░ рд╡рд╣ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЬреИрд╕реЗ рд╣реА рд╣рдо рд╕реНрдереИрддрд┐рдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рддрддреНрдХрд╛рд▓ рдкреНрд░рд╛рд░рдВрдн рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдЗрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдирд┐рд░рдВрддрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдПрдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХрднреА рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдХреЛрдИ рдЕрдВрддрд┐рдо рд░реВрдк () рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рд░реВрдк () рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╣рд╛рдВ, рдФрд░ рдЕрдЧрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдВрдд рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╕реНрддреБ рдХрдЪрд░реЗ рдореЗрдВ рдорд┐рд▓ рдЧрдИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд░реВрдк () рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдмрд╛рд░ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдВрддрд┐рдо рд░реВрдк рдореЗрдВ (), рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдЗрд╕ рдмрд╛рд░ рдЗрд╕реЗ "рд╣рдЯрд╛" рдирд╣реАрдВ рджреЗрдЧрд╛ред рдЬрдм рдпрд╣ рд╡рд╕реНрддреБ рдлрд┐рд░ рд╕реЗ рдХрдЪрд░реЗ рдореЗрдВ рдЧрд┐рд░рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдП рдмрд┐рдирд╛ () рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ () рдФрд░ рд╡рд╕реНрддреБ рдЕрднреА рднреА рдХрд┐рд╕реА рдХреЛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ "рдЕрд╕реЗрдВрдмрд▓" рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд╝рд╛рдЗрдирд▓реАрдЬрд╝ () рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд╣ рдзрд╛рд░рд╛ рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ () рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ
рдпрд╣ рдХреЗрд╡рд▓ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд▓реЛрдВ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдЧрд╛ред
рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдлрд╝рд╛рдЗрдирд▓реАрдЬрд╝ () рд╡рд┐рдзрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИ
рд╕рддрд╣ рдкрд░ рдХреНрдпрд╛ рд╣реИ рд╡рд╕реНрддреБ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░реА рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЕрдВрддрд┐рдо рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрд╛рд░ (), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдЪрд▓рддрд╛ рд╣реИред
рдЕрдВрддрд┐рдо рд░реВрдк рдореЗрдВ рдЧрддрд┐рд░реЛрдз рд╕реЗ рд▓рдбрд╝рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реИ ()
рдЧреИрд░-рддреБрдЪреНрдЫ рдЕрдВрддрд┐рдо рд░реВрдк () рдореЗрдВ, рддрд╛рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
Object.finalize () рдЬрд╛рд╡рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 9 рдХреЛ рдкрджрд╛рд╡рдирдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!
рдЬреЛ рдХрд┐ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдХреНрд▓рд╛рд╕рд┐рдХ рдЖрд▓рд╕реА рд╕рд┐рдВрдЧрд▓рдЯрди рдЖрд░рдВрднреАрдХрд░рдг: рдбрдмрд▓ рд▓реЙрдХрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдбрдмрд▓-рдЪреЗрдХ рдореБрд╣рд╛рд╡рд░рд╛), рдЬреЛ рдмрд╣реБрдд рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
public class UnsafeDCLFactory { private Singleton instance; public Singleton get() { if (instance == null) {
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЧрдИ рд╣реИ (1 рдкрдврд╝реЗрдВ, 1 рджреЗрдЦреЗрдВ)ред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд▓реЙрдХ рд╕реЗрдЯ рдХрд░реЗрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ (рд▓реЙрдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
(1 рдкрдврд╝реЗрдВ, 1 рдЪреЗрдХ рдХрд░реЗрдВ) рдФрд░ (3 рдкрдврд╝реЗрдВ) рд╕рд┐рдВрдХ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдЬрд╛рд╡рд╛ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рд╣рдорд╛рд░реЗ рдереНрд░реЗрдб рдХреЛ рддрдм рддрдХ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
mk2 , рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╣реА рд╡рд░реНрдгрди рд╣реИ:
рд╣рд╛рдВ, read1 рдФрд░ read3 рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╕рдВрдмрджреНрдз рд░реАрдбрд┐рдВрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред read1! = null, рд▓реЗрдХрд┐рди read3 == nullред рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, "рдЙрджрд╛рд╣рд░рдг = рдирдП рд╕рд┐рдВрдЧрд▓рдЯрди ();" рдХреЗ рдХрд╛рд░рдг рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди read1 рдФрд░ read3 рдирд╣реАрдВ, рд▓реЗрдХрд┐рди read3 рдФрд░ рдкрд╣реБрдВрдЪ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред
рдпрд╣ рдпрд╛ рддреЛ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЛрдбрд╝рдХрд░, рдпрд╛ рдЙрд╕ рдЪрд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд╛ рд▓рд┐рдВрдХ рдЕрд╕реНрдерд┐рд░ рд░рд╣рддрд╛ рд╣реИред (рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ 5+ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдерд╛ред) рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ (рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде - рд╕реНрдерд╛рдиреАрдп рдЪрд░ `res` рдЕрд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд░реАрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛)ред
public class SafeLocalDCLFactory { private volatile Singleton instance; public Singleton getInstance() { Singleton res = instance;
рдХреЛрдб
рдпрд╣рд╛рдБ рд╕реЗ рд▓рд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ , рдЕрд▓реЗрдХреНрд╕реА рд╢рд┐рдкрд┐рд▓реЗрд╡ рдХреА рд╕рд╛рдЗрдЯ рд╕реЗред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдЗрд╕ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
"рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди-рдСрди-рдбрд┐рдорд╛рдВрдб рд╣реЛрд▓реНрдбрд░ рдореБрд╣рд╛рд╡рд░рд╛" - рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ "рдЖрд▓рд╕реА" рд╕рд┐рдВрдЧрд▓рдЯрди рдХреА рдЖрд░рдВрднреАрдХрд░рдг
рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ (рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕) рдХреЛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд░рдореНрдн рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ! рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди-рдСрди-рдбрд┐рдорд╛рдВрдб рд╣реЛрд▓реНрдбрд░ рдЖрдЗрдбрд┐рдпрд▓ рдореИрдХреЗрдирд┐рдЬреНрдо рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред (рдХреЛрдб
рдпрд╣рд╛рдБ рд╕реЗ рд╣реИ ред)
public class Something { private Something() {} private static class LazyHolder { static final Something INSTANCE = new Something(); } public static Something getInstance() { return LazyHolder.INSTANCE; } }
LazyHolder рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ Some.getInstance () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЗрд╡реАрдПрдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ - рдпрджрд┐ рд╡рд░реНрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд░рдВрднрд┐рдХ рд╣реИ, рддреЛ рдХреЛрдИ рд╣реЗрдбрд╣реЗрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, LazyHolder.INSTANCE рдХреЛ рдПрдХ рдмрд╛рд░ "рдЖрд▓рд╕реА" рдФрд░ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рднреА рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдУрд╡рд░рд╣реЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдЯреБрдХрдбрд╝рд╛рдпрджрд┐ рдпрд╣ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдордВрдЧрд▓рд╛рдЪрд░рдг рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЛрдб рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкреИрдЪ рдХрд░рдХреЗ рдпрд╛ рдлрд┐рд░ рдХреЛрдб рд░реАрдЬрдирд┐рдВрдЧ рдХрд░рдХреЗ ред
рд╕реНрд░реЛрддред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕рд┐рдВрдЧрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдордЧреНрд░реА рдЦрддреНрдо рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рд╛рде "рдкрд╣реБрдВрдЪ" рдФрд░ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдорд╛рдВрдЧ рдореЗрдВ рд╣реЛрдЧрд╛, рддреЛ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рд░рдЪрдирд╛рддреНрдордХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓реЗрдЦ рдореЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ
рд╕рд░реНрдЧреЗрдИ-рдЧреЛрд░реЛрд╕реНрддрд╛рд╡ ,
vladimir_dolzhenko ,
OlehKurpiak ,
mk2 рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред