1.通过new创建字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同
char[] chs = {'a;.'b'};
String s1 = new String(chs);
String s2 = new String(chs);
以上代码,JVM首先会创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2的字符串内容是相同的
2.以 "" 方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在代码中出现几次,JVM都只会创建一个String对象,并在字符串池中维护
String s3= “abc” ; String s4 = “abc”;
以上代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考;第二行则让s4直接参考字符串池中的String对象,他们本质上是同一个对象。
![](https://img.haomeiwen.com/i12082685/94c4abc09a56fd29.png)
字符串的比较
使用 == 作比较
(1)基本类型:比较的是数据值是否相同
(2)引用类型:比较的是地址值是否相同(字符串是一个类,所以用==比较的时候也是比较的地址值)
equals() 可以用来比较字符串对象的内容是否相同
String和StringBuilder的区别:
String:内容是不可变的 StringBuilder:内容是可变的
toString()可以实现吧StringBuilder转换为String
public StringBuilder(String s):通过构造方法可以实现把String转换为StringBuilder
网友评论