Java – how many objects are created
•
Java
I'm discussing how to use strings and stringbuffers in Java How many objects were created in each of these two examples?
Example 1:
String s = "a"; s = s + "b"; s = s + "c";
Example 2:
StringBuilder sb = new StringBuilder("a"); sb.append("b"); sb.append("c");
In my opinion, ex 1 will create 5 and ex 2 will create 4 objects
Solution
You can determine the answer by analyzing the Java bytecode (using javap - C) Example 1 creates two StringBuilder objects (see line 4) and two string objects (see line 7), while example 2 creates a StringBuilder object (see line 2)
Note that you must also consider char [] objects (because arrays are objects in Java) Both string and StringBuilder objects are implemented using the underlying char [] Therefore, example 1 creates eight objects and example 2 creates two objects
Example 1:
public static void main(java.lang.String[]); Code: 0: ldc #2; //String a 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 b 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_1 23: new #3; //class java/lang/StringBuilder 26: dup 27: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V 30: aload_1 31: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 34: ldc #8; //String c 36: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 39: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 42: astore_1 43: return }
Example 2:
public static void main(java.lang.String[]); Code: 0: new #2; //class java/lang/StringBuilder 3: dup 4: ldc #3; //String a 6: invokespecial #4; //Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V 9: astore_1 10: aload_1 11: ldc #5; //String b 13: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 16: pop 17: aload_1 18: ldc #7; //String c 20: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 23: pop 24: return }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码