企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 编译器对字符串的优化 * String通过"+"拼接时如果拼接的对象是常量,则在编译期被合并优化; ``` String st = "a" + "b" + "c"; // 或者final String s = "a";编译器认为它是不可变的常量会自动合并优化 javap out==============> Code: stack=1, locals=2, args_size=1 0: ldc #19 // String abc 2: astore_1 3: return ``` * Stirng通过"+"拼接的对象是变量,则编译器通过StringBuilder进行append ``` public static void main(String[] args){ String name = "luoyobao"; String sb = name + "hello"; } javap -v AppTest.class==> 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 luoyobao 2: astore_1 3: new #3 // class java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V 10: aload_1 11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 14: ldc #6 // String hello 16: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 22: astore_2 23: return LineNumberTable: line 5: 0 line 6: 3 line 7: 23 LocalVariableTable: Start Length Slot Name Signature 0 24 0 args [Ljava/lang/String; 3 21 1 name Ljava/lang/String; 23 1 2 sb Ljava/lang/String; ```