版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/84595196
String类的内存解析:终极
1.Java String类:构造字符串对象
- 常量对象:字符串常量对象是用双引号括起的字符序列。 例如:“你好”、“12.97”、"boy"等。
- 字符串的字符使用Unicode字符编码,一个字符占两个字节
- String类较常用构造方法:
① String s1 = new String();
② String s2 = new String(String original);
③ String s3 = new String(char[] a);
④ String s4 = new String(char[] a,int startIndex,int count)
2. String str = “abc”;与String str1 = new String(“abc”);的区别?
点击上面问题的答案
3.字符串的特性
- String是一个final类,代表不可变的字符序列
- 字符串是不可变的。一个字符串对象一旦被配置,其内容是不可变的。
4.字符串的内存解析:终极
- ①②③⑧原因是:点击进入String类底层解析
- String str5 = “Andriod”;str5 = str5 +“Handoop”;的代码执行顺序Jvm内存解析图,解释了String是不可变的字符序列
- String str4 = “JavaEE”+“Andriod”;String str8 = “JavaEEAndriod”;两个写法在内存中一样,指向同一个地址。解释了 ⑦
public class TestString {
@Test
public void test1() {
String str1 = "JavaEE";
String str2 = "JavaEE";
String str3 = new String("JavaEE");
String str4 = "JavaEE"+"Andriod";
String str5 = "Andriod";
String str6 = str1 +str5;//指向str1和str的地址,类似于⑧,解释了⑧
str5 = str5 +"Handoop";
String str7 = str6.intern();//这个方法表示拼到一起的,只看内容;⑤ ⑥
String str8 = "JavaEEAndriod";
System.out.println(str1 == str2);//true ①
System.out.println(str1 == str3);//false ②
System.out.println(str1.equals(str3));//true ③
System.out.println(str4 == str6);//false ④
System.out.println(str4.equals(str6));//true ⑤
System.out.println(str7 == str4);//true ⑥
System.out.println(str8 == str4);//true ⑦
Person p1 = new Person("AA");
Person p2 = new Person("AA");
System.out.println("^^"+(p1.name=p1.name));//true ⑧
}
}
class Person{
String name;
Person(String name){
this.name = name;
}
}