
* * *
#### Java中的String类探索
* [一、深入理解String类](#一深入理解String类)
* [1、类的声明与特性](#1类的声明与特性)
* [2、内部属性的探讨](#2内部属性的探讨)
* [3、字符串常量的存储机制](#3字符串常量的存储机制)
* [4、不可变性的深远影响](#4不可变性的深远影响)
* [5、实例化String的途径](#5实例化String的途径)
* [6、字符串拼接的艺术](#6字符串拼接的艺术)
* [二、String的构造器详解](#二String的构造器详解)
* [1、构造器的多样性](#1构造器的多样性)
* [2、String与char数组的转换](#2String与char数组的转换)
* [3、String与byte数组的转换](#3String与byte数组的转换)
* [三、String的常用方法概览](#三String的常用方法概览)
## 一、深入理解String类
### 1、类的声明与特性
```java
public final class String
implements java.io.Serializable, Comparable, CharSequence {
final
关键字表明String类是封闭的,不允许被继承;
实现了Serializable
接口,使得String对象可以在网络上传输或存储;
实现了Comparable
接口,允许String对象进行大小比较。
2、内部属性的探讨
private final char value[];
这是存储字符串数据的核心容器。
final
关键字确保一旦value
数组被初始化,其引用地址将不可更改。
3、字符串常量的存储机制
字符串常量被统一存储在字符串常量池(StringTable)中,该池不允许存放重复的字符串常量。不同JDK版本中,字符串常量池的存放位置有所差异。
4、不可变性的深远影响
- 重新赋值字符串变量时,需要指定一个新的字符串常量位置,不能在原位置进行修改。
- 进行字符串拼接时,需要开辟新的空间来保存结果。
- 使用
replace
方法替换字符时,也需要新的空间来保存修改后的字符串。
public class StringDemo {
public static void main(String[] args) {
StringDemo s = new StringDemo();
s.test2();
s.test3();
}
public void test2() {
String s1 = "hello";
String s2 = "hello";
s2 = "hi";
s2 += "world";
System.out.println(s1); // 输出: hello
System.out.println(s2); // 输出: hiworld
}
public void test3() {
String s1 = "hello";
String s2 = "hello";
String s3 = s2.replace('l', 'o');
System.out.println(s1); // 输出: hello
System.out.println(s2); // 输出: hello
System.out.println(s3); // 输出: heooo
}
}
5、实例化String的途径
可以通过直接赋值或使用new
关键字来实例化String对象。
public class StringDemo1 {
public static void main(String[] args) {
StringDemo1 s = new StringDemo1();
s.test1();
}
public void test1(){
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println(s1 == s2); // 输出: true
System.out.println(s1 == s3); // 输出: false
System.out.println(s1 == s4); // 输出: false
System.out.println(s3 == s4); // 输出: false
System.out.println(s1.equals(s2)); // 输出: true
System.out.println(s1.equals(s3)); // 输出: true
System.out.println(s1.equals(s4)); // 输出: true
System.out.println(s3.equals(s2)); // 输出: true
}
}
6、字符串拼接的艺术
- 常量与常量的拼接结果存储在字符串常量池中。
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4605.html