目录
一、String类介绍
1、String类是干嘛的?
- String类是lang包下的类,即java.lang.String。
- 该类的实例对象用于保存字符串,即用双引号括起来的字符序列:"hello", "你好"。
- 字符串的字符采用Unicode字符编码,一个字符占两个字节(不论是字母还是汉字)。
- 该类有很多构造器。
2、详细介绍String类
package com.hspedu.Wrapper;
public class String01 {
public static void main(String[] args) {
//1.String对象用于保存字符串
//2.字符串中的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
//3.String类有很多构造器,形成构造器的重载
//4.String类实现了Serializable接口,说明String类可以串行化,可以进行网络传输。
//5.String类实现了Comparable接口,说明String对象可以进行比较。
//6.String类是final类,不能被其他的类继承
//7.String有属性private final char value[];用于存放字符串内容
//8.注意value是final类型,不可以修改(这里指的是value指向的地址不可以修改,而Value中的字符内容可以修改)
String name = "jack";
}
}
3、String类是final类,无法被继承。
4、String类是在char数组中,保存字符串。注意:该char类型数组是final类型,因此无法修改。(指的是地址无法修改,而非内容,一旦内容更改,该final数组就指向了另一个地址)
二、String类的构造器
该类有很多构造器,下面列举部分:
三、String类的体系图
简单解释:1、String类实现了Serializable接口,说明String类可以串行化,可以进行网络传输。2、String类实现了Comparable接口,说明String对象可以进行比较。
四、创建String对象的两种方式
1、直接赋值
String s = "hsp";
流程:
先从常量池中查看是否有"hsp"数据空间,如果有,s直接指向该空间;如果没有则重新创建,然后再指向。不管怎样,s最终指向的是常量池的空间地址。
2、调用构造器
String s = new String("hsp");
流程:
先在堆中创建空间,里面维护了value属性,指向常量池中的hsp空间。如果常量池中没有"hsp",重新创建;如果有,直接通过value指向。不管怎样,s最终指向的是堆中的空间地址。
3、两种方式的内存布局图
Tips:从上面可以看出String类,每次更新内容都需要重新开辟空间,效率较低,因此java设计者提供了StringBuffer类和StringBuilder类来增强String类的功能,以此提高效率。