рдЬреЗрдбреАрдХреЗ 9 / рдЬреЗрдИрдкреА 280: рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╕рдВрдШрдЯрди рдлрд┐рд░ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛

рдлрд┐рд░ рд╕реЗ рдирдорд╕реНрдХрд╛рд░ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдерд╛, рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдкрд╛рдареНрдпрдХреНрд░рдо "рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░" рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рд╢реБрд░реВ рд╣реЛрдЧрд╛, рд╕реНрдерд╛рдкрд┐рдд рдкрд░рдВрдкрд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рд╡рд┐рд╖рдп рдкрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗред

JDK 9 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдлреИрдиреЗрдЯреЗрд╢рди рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВред

JEP 280 (тАЬIndring String ConcatenationтАЭ) рдХреЛ JDK 9 рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рд╛рд░рд╛рдВрд╢ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░: тАЬJDK рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЗрдирд╡реЗрдбреЗрдХреНрдиреЗрдорд┐рдХ рдХреЙрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП javac рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдЯреЗрдХреНрдиреЗрд╢рди рдмрд╛рдЗрдЯрдХреЛрдб рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИредтАЭ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдШрдирди рдкрд░ рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЬрд╛рд╡рдк рдЙрддреНрдкрд╛рджрди рдкрд░ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЬреЗрдбреАрдХреЗ 9 рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЬреЗрдбреАрдХреЗ 9 рдХреЗ рдмрд╛рдж рдЬреЗрдбрдбреАрдХреЗ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдШрдирди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, "HelloWorldStringConcat" рдирд╛рдордХ рдПрдХ рд╕рд░рд▓ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

package dustin.examples; import static java.lang.System.out; public class HelloWorldStringConcat { public static void main(final String[] arguments) { out.println("Hello, " + arguments[0]); } } 

JDK 8 (AdoptOpenJDK) рдФрд░ JKK 11 (Oracle OpenJDK) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп HelloWorldStringConcat рдХреНрд▓рд╛рд╕ рдХреЗ main(String) рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП -verbose javap рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ рдХреА рддреБрд▓рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЕрдВрддрд░реЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ред

JDK 8 рдЬрд╛рд╡рдк рдЖрдЙрдЯрдкреБрдЯ

 Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringConcat.class Last modified Jan 28, 2019; size 625 bytes MD5 checksum 3e270bafc795b47dbc2d42a41c8956af Compiled from "HelloWorldStringConcat.java" public class dustin.examples.HelloWorldStringConcat minor version: 0 major version: 52 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=4, locals=1, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: new #3 // class java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."10: ldc #5 // String Hello, 12: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_0 16: iconst_0 17: aaload ":()V 18: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 21: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 24: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 27: return //  java/io/PrintStream.println:(Ljava/lang/String;)V 27: return 

JDK 11 javap рдЖрдЙрдЯрдкреБрдЯ

 Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringConcat.class Last modified Jan 28, 2019; size 908 bytes MD5 checksum 0e20fe09f6967ba96124abca10d3e36d Compiled from "HelloWorldStringConcat.java" public class dustin.examples.HelloWorldStringConcat minor version: 0 major version: 55 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=3, locals=1, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: aload_0 4: iconst_0 5: aaload 6: invokedynamic #3, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String; 11: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 14: return 

JEP 280 рдореЗрдВ "рд╡рд┐рд╡рд░рдг" рдЕрдиреБрднрд╛рдЧ рдЗрд╕ рдЕрдВрддрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ: "рд╡рд┐рдЪрд╛рд░ рдкреВрд░реЗ invokedynamic рдиреГрддреНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг invokedynamic рдХреЙрд▓ рдХреЗ рд╕рд╛рде java.lang.invoke.StringConcatFactory рд╣реИ , рдЬреЛ рдЙрди рдореВрд▓реНрдпреЛрдВ рдкрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред" рд╕рдорд╛рди рдЕрдиреБрднрд╛рдЧ рд╕рдорд╛рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдШрдирди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╕рдорд╛рди рддреБрд▓рдирд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

JDK 11 рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдХреЗрд╡рд▓ JDK 8 рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд▓рд╛рдЗрдиреЗрдВ рдирд╣реАрдВ рд╣реИ; рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрдо "рдорд╣рдВрдЧреЗ" рдСрдкрд░реЗрд╢рди рднреА рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдерд╛ "рдЬрд╛рд╡рд╛-рдмрд╛рдп-рдмрд╛рдпреЛрдбреЗрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдлреНрд░реЗрдиреЗрд╢рди рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдВрд╡ рд░рдЦрдирд╛" рдФрд░ "рдЬреЗрд╡реИрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрд╕реЗрдкреНрдЯреЗрд╢рди рдЕрдиреБрдХреВрд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ред" "

StringBuffer (рдЬреЛ рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ ) рдФрд░ StringBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рд╣реИред тАЬрдЧреИрд░-рд▓рдХреНрд╖реНрдптАЭ рдореЗрдВ JEP 280 рдореЗрдВ, рдпрд╣ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ тАЬрд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ / рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирдпрд╛ рдПрдкреАрдЖрдИ рдкреЗрд╢ рди рдХрд░реЗрдВ рдЬреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЕрдиреБрд╡рд╛рдж рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХреЗредтАЭ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╕рд░рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдШрдирди рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрд╕реНрдЯ рдФрд░ рд╕реНрдЯреНрд░реАрдВрдЧрдмрдлрд╝рд░ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рд╕рдВрдХрд▓рдХ рдХреЛ рдЬреЗрдИрдкреА 280 рдореЗрдВ рд╢реБрд░реВ рдХреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕реВрдЪрд┐рдпрд╛рдВ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрд╛рд░ рдХреЛ рд╕рдореЗрдЯрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡реЗ рдХреНрд░рдорд╢рдГ StringBuilder рдФрд░ StringBuffer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм JDK 8 рдФрд░ JDK 11 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП javap -verbose рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп (рд╕реНрдЯреНрд░рд┐рдВрдЧ []) рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред

рдЬреЗрдбреАрдХреЗ 8 рдФрд░ рдЬреЗрдбреАрдХреЗ 11 рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрд▓ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рди рд╣реИ

 package dustin.examples; import static java.lang.System.out; public class HelloWorldStringBuilder { public static void main(final String[] arguments) { out.println(new StringBuilder().append("Hello, ").append(arguments[0]).toString()); } } 

 Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringBuilder.class Last modified Jan 28, 2019; size 627 bytes MD5 checksum e7acc3bf0ff5220ba5142aed7a34070f Compiled from "HelloWorldStringBuilder.java" public class dustin.examples.HelloWorldStringBuilder minor version: 0 major version: 52 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=4, locals=1, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; //  java/lang/System.out:Ljava/io/PrintStream; 3: new #3 // class java/lang/StringBuilder //  java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."":()V 10: ldc #5 // String Hello, 12: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_0 16: iconst_0 17: aaload 18: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 21: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 24: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 27: return 

 Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringBuilder.class Last modified Jan 28, 2019; size 627 bytes MD5 checksum d04ee3735ce98eb6237885fac86620b4 Compiled from "HelloWorldStringBuilder.java" public class dustin.examples.HelloWorldStringBuilder minor version: 0 major version: 55 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=4, locals=1, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: new #3 // class java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."":()V 10: ldc #5 // String Hello, 12: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 15: aload_0 16: iconst_0 17: aaload 18: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 21: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 24: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 27: return 

рдЬреЗрдбреАрдХреЗ 8 рдФрд░ рдЬреЗрдбреАрдХреЗ 11 рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрдЧрд░ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рди рд╣реИ

 package dustin.examples; import static java.lang.System.out; public class HelloWorldStringBuffer { public static void main(final String[] arguments) { out.println(new StringBuffer().append("Hello, ").append(arguments[0]).toString()); } } 

 Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringBuffer.class Last modified Jan 28, 2019; size 623 bytes MD5 checksum fdfb90497db6a3494289f2866b9a3a8b Compiled from "HelloWorldStringBuffer.java" public class dustin.examples.HelloWorldStringBuffer minor version: 0 major version: 52 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=4, locals=1, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: new #3 // class java/lang/StringBuffer 6: dup 7: invokespecial #4 // Method java/lang/StringBuffer."":()V 10: ldc #5 // String Hello, 12: invokevirtual #6 // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer; 15: aload_0 16: iconst_0 17: aaload 18: invokevirtual #6 // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer; 21: invokevirtual #7 // Method java/lang/StringBuffer.toString:()Ljava/lang/String; 24: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 27: return 

 Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringBuffer.class Last modified Jan 28, 2019; size 623 bytes MD5 checksum e4a83b6bb799fd5478a65bc43e9af437 Compiled from "HelloWorldStringBuffer.java" public class dustin.examples.HelloWorldStringBuffer minor version: 0 major version: 55 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=4, locals=1, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: new #3 // class java/lang/StringBuffer 6: dup 7: invokespecial #4 // Method java/lang/StringBuffer."":()V 10: ldc #5 // String Hello, 12: invokevirtual #6 // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer; 15: aload_0 16: iconst_0 17: aaload 18: invokevirtual #6 // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer; 21: invokevirtual #7 // Method java/lang/StringBuffer.toString:()Ljava/lang/String; 24: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 27: return 

JDK 8 рдФрд░ JDK 11 рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд▓реВрдкрд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдЯреИрдХреНрд╢рдВрд╕

JEP 280 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ, рдореИрдВ рдирдореВрдирд╛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдХреБрдЫ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдФрд░ рд▓реВрдк рдореЗрдВ рдХрдВрдХреНрд░реАрдЯрд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдШрд░ рдкрд░ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВред

 package dustin.examples; import static java.lang.System.out; public class HelloWorldStringConcatComplex { public static void main(final String[] arguments) { String message = "Hello"; for (int i=0; i<25; i++) { message += i; } out.println(message); } } 

 Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringConcatComplex.class Last modified Jan 30, 2019; size 766 bytes MD5 checksum 772c4a283c812d49451b5b756aef55f1 Compiled from "HelloWorldStringConcatComplex.java" public class dustin.examples.HelloWorldStringConcatComplex minor version: 0 major version: 52 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=3, args_size=1 0: ldc #2 // String Hello 2: astore_1 3: iconst_0 4: istore_2 5: iload_2 6: bipush 25 8: if_icmpge 36 11: new #3 // class java/lang/StringBuilder 14: dup 15: invokespecial #4 // Method java/lang/StringBuilder."19: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 22: iload_2 23: invokevirtual #6 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder; 26: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 29: astore_1 30: iinc 2, 1 ":()V 18: aload_1 33: goto 5 36: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream; 39: aload_1 40: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 43: return 

  Classfile /C:/java/examples/helloWorld/classes/dustin/examples/HelloWorldStringConcatComplex.class Last modified Jan 30, 2019; size 1018 bytes MD5 checksum 967fef3e7625965ef060a831edb2a874 Compiled from "HelloWorldStringConcatComplex.java" public class dustin.examples.HelloWorldStringConcatComplex minor version: 0 major version: 55 . . . public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=3, args_size=1 0: ldc #2 // String Hello 2: astore_1 3: iconst_0 4: istore_2 5: iload_2 6: bipush 25 8: if_icmpge 25 11: aload_1 12: iload_2 13: invokedynamic #3, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;I)Ljava/lang/String; 18: astore_1 19: iinc 2, 1 22: goto 5 25: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream; 28: aload_1 29: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 32: return 

рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ "рдПрдирдл рдЬрд╛рд╡рд╛.рд▓рдВрдЧ.рдЯреНрд░реАрдВрдЧ рдЯреВ рд╣реИрдВрдЧ рдпреЛрд░рд╕реЗрд▓реНрдл ..." , рдбреЙред рд╣реЗрдВрдЬ рдПрдо рдХрд╛рдмреБрддреНрдЬрд╝ рдФрд░ рджрд┐рдорд┐рддреНрд░реА рд╡реНрдпрд╛рдЬрд╝реЗрд▓реЗрдВрдХреЛ рдиреЗ рдЬрд╛рд╡рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рд╛, "+ рдЕрдзрд┐рдХ StringBuilder рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ тАЭред рдЖрдЬ рдХреА рд╕реНрд▓рд╛рдЗрдб рд╕реЗ рд╕рдмрдХ рдкрд░, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ: "рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реЛ рдЙрд╕рдХреЗ рдмрдЬрд╛рдп + рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдФрд░ "рдЬрд╛рд╡рд╛ 9+ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрдХреНрд╖рд╛рдПрдВред"

JEP 280 рдХреЗ рд╕рд╛рде JDK 9 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди, "рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдХреИрдЯреАрдиреИрд╢рди рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдмрд┐рдирд╛ javac рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП bytecode рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗред" рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╣ рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереА рдХрд┐ JEP 348 ("JDK APIs рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдВрдЯреНрд░рд┐рдВрд╕рд┐рдХреНрд╕") рдЕрдм JEP рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ :: рдкреНрд░рд╛рд░реВрдк рдФрд░ Objects::hash рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдПрдХ рдЙрдкрдпреЛрдЧреА рд▓реЗрдЦ рд╣реИ? рд╣рдо рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХреЛ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдПрдХ рдЦреБрд▓реЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ 25 рдорд╛рд░реНрдЪ рдХреЛ рдУрдЯреАрдпреВрдПрд╕ рдХреЗ рдорд╣рд╛рдирд┐рджреЗрд╢рдХ - рд╡рд┐рдЯрд╛рд▓реА рдЪрд┐рдмреНрд░реАрдХреЛрд╡ рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Source: https://habr.com/ru/post/hi444822/


All Articles