String aaa=new String("123");
String bbb="123";
这两种声明方法有什么区别?难道后者没有创建一个String对象?
String aaa=new String("123");
String bbb="123";
这两种声明方法有什么区别?难道后者没有创建一个String对象?
这两行代码的字节码指令如下
public static void main(java.lang.String[]);
Code:
0: new #2 // class java/lang/String 创建一个String对象,并且其引用进栈
3: dup
4: ldc #3 // String 123 将String型常量值从常量池中推送至栈顶
6: invokespecial #4 // Method java/lang/String."<init>": 调用String构造方法 public String(String original)
Ljava/lang/String;)V
9: astore_1
10: ldc #3 // String 123 将String型常量值从常量池中推送至栈顶
12: astore_2
13: return
这就是他们的区别。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
有一定的区别,如果没有特殊需求,也没有用到new String("123") 的需求。
String str1="ABC"; 和String str2 = new String("ABC");
String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").