【面试】String创建时在内存中的方式

来源:互联网 发布:数据库内找账号密码 编辑:程序博客网 时间:2024/06/07 04:03

String创建对象的方式

1.String s = new String("...");

2.String s = "...";


两种方式的区别

通过代码来了解这两种方式的区别:

package cn.com.domain;public class Test1 {public static void main(String[] args) {String s1 = "Hello";String s2 = "Hello";String s3 = new String("Hello");String s4 = new String("Hello");System.out.println(s1 == s2);System.out.println(s1==s3);System.out.println(s3==s4);}}

运行结果:

truefalsefalse

对结果的分析(两种方式的区别):

我们使用String s1 = "Hello";  创建了一个对象s1,这个对象被创建之后,被放在了字符串常量缓冲区中;

后来,我们再次使用String s2 = "Hello";创建s2对象的时候,并没有创建新的对象,而是从字符串常量缓冲区中取出来。

所以本质上,s1和s2是一个对象。

对于String s3 = new String("Hello");这是java创建对象的标准形式。每次new一个,都是创建一个新对象、所以s3和s4是两个不同的对象。



可以分析下面这个代码:

有一个类:Test2

package cn.com.domain;public class Test2 {String s;public Test2() {s = "Demo";}public String getS() {return s;}public void setS(String s) {this.s = s;}}
还有一个类:Test3

package cn.com.domain;public class Test3 {String s ;public Test3() {s = new String("Demo");}public String getS() {return s;}public void setS(String s) {this.s = s;}}

最后是一个测试类Test4:

package cn.com.domain;public class Test4 {public static void main(String[] args) {Test2 t2 = new Test2();Test2 t21 = new Test2();Test3 t3 = new Test3();Test3 t31 = new Test3();System.out.println(t2.getS() == t21.getS());System.out.println(t3.getS() == t31.getS());}}


输出结果是:

truefalse

自己分析吧!!!!!








原创粉丝点击