一、简要介绍
String表示字符串类型,属于 引用数据类型,不属于 基本数据类型。
字符串是程序开发当中,使用最频繁的类型之一,有着与基础类型相同的地位,
甚至在 JVM(Java 虚拟机)编译的时候会对字符串做特殊的处理,
比如拼加操作可能会被 JVM 直接合成为一个最终的字符串,从而到达高效运行的目的。
二、String
1、String的特性
- String 是标准的不可变类(immutable),对它的任何改动,其实就是创建了一个新对象,再把引用指向该对象;
- String 对象赋值之后就会在常量池中缓存,如果下次创建会判定常量池是否已经有缓存对象,如果有的话直接返回该引用给创建者。
2、创建方式
字符串创建的两种方式:
- String str = "yangJin";
- String str = new String("yangJin");
3、String的创建与赋值
String s1 = "yangJin";
String s2 = s1;
String s3 = new String(s1);
System.out.println(s1 == s2); //ture
System.out.println(s1 == s3); //false
s3 使用 new String 时一定会在堆中重新创建一个内存区域,而 s2 则会直接使用了 s1 的引用,所以得到的结果也完全不同。
4、String的存储
String作为引用数据类型,它的值是存放到JVM的堆里面;
并且它不会被修改,因为当我们给String赋新的值时,是将该变量名指向了新的地址,
原始的值没有被修改,只是不被引用了。
所以,才会有 StringBuffer、StringBuild 两个类进行扩展,它们支持对原始值的修改。
5、String的常用方法
返回值 方法名(参数) | 作用 |
char charAt(int index) | 返回指定位置的字符 |
boolean contains(CharSequence s) | 判断字符串是否包含参数 |
int compareTo(String anotherString) | 比较两个字符串。相等返回0;前大后小返回1;前小后大返回-1 |
boolean equals(Object anObject) | 判断两个串是否相等 |
boolean equalsIgnoreCase (String anotherString) | 忽略大小写判断两个串是否相等 |
byte[] getBytes() | 将字符串变成字节数组返回 |
char[] toCharArray() | 将字符串转换乘char数组 |
int indexOf(String str) | 返回str在字符串第一次出现的位置 |
int lastIndexOf(String str) | 返回str最后一次出现的位置 |
boolean isEmpty() | 字符串是否为空 |
int length() | 字符串长度 |
String replace(CharSequence target, CharSequence replacement) | 用replacement替换字符串target的字符 |
String[] split(String regex) | 将字符串以regex分割 |
String substring(int beginIndex) | 从beginIndex开始截取字串 |
String substring(int beginIndex, int endIndex) | 截取beginIndex到endIndex - 1的字符串 |
String toLowerCase() | 字符串转小写 |
String toUpperCase() | 字符串转大写 |
String trim() | 去除字符串两边空格 |
static String valueOf(int i) | 将 i 转换成字符串 |
三、String、StringBuffer、StringBuild
1、简单介绍
字符串相关类型主要有这三种:
String、StringBuffer、StringBuild,
其中 StringBuffer、StringBuild 都是可以变的字符串类型,
StringBuild 是非线程安全的,所以多线程下推荐使用 StringBuffer。
2、StringBuffer的常用方法
(1)StringBuffer append(xxx) :用于字符串拼接。
(2)StringBuffer delete(int start,int end) :删除指定位置的内容。
(3)StringBuffer replace(int start,int end,String str) :把[start,end)位置替换为str。(注意左闭右开)
(4)StringBuffer reverse() :把当前字符序列逆转
(5)StringBuffer insert(int offset,xxx) :在指定位置offset插入xxx。
(6)StringBuffer substring(inr start,int end) :在[start,end)截取x新的字符串。(注意左闭右开)
(7)StringBuffer length() :返回该字符串的长度。
(8)StringBuffer charAt(int n) :返回字符串上n的位置的字符
(9)StringBuffer setCharAt(int n,char ch) :将自负床中位置为n的字符变为ch。
3、StringBuild的常用方法
StringBuilder与StringBuffer非常相似,均可代表可变的字符序列,而且提供相关的方法也一样。