String灵魂3问

119 阅读1分钟

怎么理解string 是不可变的?

String s= "hello ";

s= "Java ";

String s1= "hello ";

String s2=new String( "hello ");

比如有以上3行代码,具体是如何体现字符串的不可变性的?

首先执行第一行代码,会再String池中创建一个“hello”对象,然后执行第二行代码,会在String池中创建“java”对象,并将s的引用指向“java”,然后执行第三行代码,会在String池种查是否存在“hello”,存在,将s1的引用指向“hello”,然后执行第四行代码,在String池种找是否已经存在“hello”,存在,然后创建对象s2,这里其实只是创建了一个对象,以为String池种已经存在了“hello”

blog.csdn.net/tzs_1041218…

每次对String类型变量改变的时候,其实是创建了一个新的对象(也可能直接从常量池中取),并指向了该新的对象的引用。

String s = new String("xyz")` 会创建几个对象?

会创建1个或者2个对象。先在字符串常量池中找,如果已经存在“syn”,则不创建对象,否则创建一个“syn”对象,之后再创建一个s对象。

String为什么是不可变的?

简单的来说,String 类中使用 private,final 关键字字符数组保存字符串。代码如下

 // String.java ​ private final char[] value; ​

而且同时并未对外提供修改的value 字符数组的方法,所以是不可变的。