一、String类概述
1、概述
java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例。String 是引用数据类型,不是基本数据类型。
类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符的字符串的副本。
2、特点【重要】
a、字符串不变:字符串的值在创建后不能被更改。【非常重要】
Demo:
String s1 = "abc";
s1 += "def";
System.out.println(s1); // s1 = "abcdef"
分析:内存中有"abc","abcdef"两个对象,s1从指向 "abc",改变指向,指向了"abcdef" ,字符串本身并没有改变,而是改变了指向。
b、因为String对象是不可变的,所以它们可以被共享。
Demo:
String str1 = "abc";
String str2 = "abc";
分析:内存中只有一个 "abc" 对象被创建,同时被 s1 和 s2 共享。
c、字符串效果上相当于是 char[ ] 字符数组,但是底层原理是 byte[ ] 字节数组。
Demo:
String str = "abc";
相当于
char datas[] = {'a', 'b', 'c'};
String str = new String(datas);
二、String类 使用步骤
1、导包
String 这个类 是 java.lang.String 包内的,不需要手动导入。
扩展:常用的如 基本数据类型,String,还有一些工具类,只要是 lang 包下面的,就不必写 import 导包语句。
2、创建字符串
创建字符串的常见3+1种方式。(三种构造方法,一种直接创建)
a、构造方法创建
public String() : 初始化新创建的 String对象,以使其表示空字符序列
public String(char[] value) :通过当前参数中的字符数组来构造新的String。
public String(byte[] bytes) :通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。
Demo:
// 无参构造
String str = new String();
// 通过字符数组构造
char chars[] = {'a', 'b', 'c'};
String str2 = new String(chars);
// 通过字节数组构造
byte bytes[] = { 97, 98, 99 };
String str3 = new String(bytes);
b、直接创建
String str = "字符串内容"; // 右边直接用双引号
分析:这里面虽然没有 new 关键字,但同时创建了一个 String 对象。
三、字符串常量池
1、当直接创建一个字符串时,变量会到字符串常量池中去寻找该字符串,如果找到了,该变量指向该字符串;如果没有找到,会用 byte[ ]拼接成所需的字符串,然后放入常量池中并指向它。
2、使用 new 关键字创建字符串,会在堆区创建一个 String 对象,而且底层是用 byte[ ] 数组拼接的,这个 String 对象并没有放入字符串常量池中,而是在堆中,该变量指向该对象的地址。