Java基础复习String对象创建的分析

来源:互联网 发布:vs2010 socket编程 编辑:程序博客网 时间:2024/05/18 08:55

java虚拟机分为堆,栈,方法区。String是一个final类,一但被创建后就不能被更改其值

1.Sample sample = new Sample("abc");

“sample”  对象名,只是分配了一个引用,并不会为它分配一个存储空间,引用一般保存在栈里面,"abc"是个常量 一个字面值,编译的时候直接存储它的字面值,这样的字面值一般被创建在String维护的常量池,在方法区中。new Sample()一般通过new出来的对象保存在堆里面,堆里面会保存完整的对象信息。所以严格来说只创建了一个对象。如果认为常量池里面的'abc'也是一个对象的话,那就是创立了2个对象,但是我认为只有在堆里面保存的才是真正的对象

2.String a = "123";

String b = "123"

System.out,.println(a==b);//true

a和b都保存在String的常量池中,引用a创立后JVM先到字符串池中查找,看是否已经存在值为"123"的对象,如果存在,则不再创建新的对象,直接返回已存在对象的引用;如果不存在,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。所以创立b的时候就直接返回"123"的引用了。

3.String a = new String("123");//引用a指向堆中的对象

String b = "123";//指向常量池

System.out,.println(a==b);//false,当然不可能相等

4 String a ="1"+"2"+"3";创建了几个对象。“1”.“2”,“12”,“3”.“123”,只是产生了5个常量,按照分析是字面值保存在常量池里面,如果上面3个例子分析成立的话,严格来说就是没有创建对象,或是创立了5个对象




0 0