Java-String类
1.概述
String:字符串,使用一对""引起来表示。
- String声明为final的,不可被继承
- String实现了Serializable接口:表示字符串是支持序列化的。
- 实现了Comparable接口:表示String可以比较大小
- String内部定义了final char[] value用于存储字符串数据
- 通过字面量的方式(区别于new给一个字符串赋值,此时的字符串值声明在字符串常量池中)
- 字符串常量池中是不会存储相同内容(使用String类的equals()比较,返回true)的字符串的
2.String 常量不可变 举例
String不可变
package com.lmw.classtest;
import org.junit.Test;
/**
* @author
* @version 1.0.0
* @createTime 2022/5/15 16:31
* @description
*/
public class StringTest {
@Test
public void test() {
// 在常量池中创建一个abc 及地址 s1变量指向abc地址
String s1 = "abc";
// 没有创建新的abc及地址,只是s2变量也指向了abc的地址
String s2 = "abc";
//在常量池中创建hello,修改变量s1 指向hello
// s1 = "hello";
// 在常量池中创建了一个新的常量 abcdef
String s3 = s1 + "def";
// 修改字符或者字符串时也是在常量池中新创建了一个常量
String s4 = s2.replace("a", "x");
System.out.println(s1 == s2);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}
@Test
public void test2() {
// 此时的s1和s2的数据声明在方法区中的字符串常量池中
String s1 = "javaee";
String s2 = "javaee";
// 此时的s3 和s4 保存的地址值,是数据在堆空间中开辟空间以后对应存储值
String s3 = new String("javaee");
String s4 = new String("javaee");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
System.out.println(s1 == s4); // false
System.out.println(s3 == s4); // false
}
}
String s = new String("abc");
会在内存中创建两个对象。
false
}
}
`String s = new String("abc");` 会在内存中创建两个对象。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f6aa77858f414544855d030d87c14773.png#pic_center)