好像没有什么区别,我喜欢用String s="aa";
解决方案 »
- 一个关于 socket 的问题
- 怎样精简 jre
- 看不懂javap -verbose得到的结果,高手进来注释一下.(另外开贴给分.)
- 如何用java代码来查看某个windows服务的当前状态....在线等.....捏着分等前辈
- 怎样用java通过串口对PLC 采集数据
- 高手请看:怎样用xml文件存储和传输多媒体文件并解析!!急啊。。。(100分)
- 关于用java运行控制台命令程序代码段Runtime为什么在windows上有异常呢? 80分
- rs.getString()的问题
- 感谢sharptop版主提供的webchart,给分了!请版主进入!
- 为什么会输出t=:a:b:c:d:e:f
- 如何判断 得到的时间和数据库中的时间的大小?
- java简单执行流程问题!请高手指教
String s=new String("aa");
}
相应字节码为
class a extends java.lang.Object{
java.lang.String s;a();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: aload_0
5: new #2; //class String
8: dup
9: ldc #3; //String aa
11: invokespecial #4; //Method java/lang/String."<init>":(Ljava/lang/Strin
g;)V
14: putfield #5; //Field s:Ljava/lang/String;
17: return}class b{
String s="aa";
}
相应字节码为
class b extends java.lang.Object{
java.lang.String s;b();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #2; //String aa
7: putfield #3; //Field s:Ljava/lang/String;
10: return}
new String("aa")用一次就开辟一次。
String s1="aa";
String s2="aa";
s1和s2指向的内存地址是一样的。
但是假如你用了String s=new String("aa"),
String s1=new String("aa");
String s2=new String("aa");
s1和s2指向的内存地址是不一样的。
new String("aa")用一次就开辟一次
哈哈,正好反过来。。s="aa"是开辟了空间。
new String("aa") 是 "aa"已经开辟了空间,new String()是对"aa"的一个引用。
new String("aa")用一次就开辟一次。
new就是要开辟新空间
不用new就是只申请一次空间
编译期间就决定了
String s = new String("aa")在堆栈上重新分配一块内存
看这个程序你可能更明白:
String a = "aa";
String b = new String("aa");
String c = "a"+"a";
System.out.println(a == b); //false
System.out.println(a == c); //true
System.out.println(a.equals(b));//true
String s="aa“只使用一个string实际列
这是书上说的《effective java》11页