用于描述字符串事物,提供了多个方法对字符串进行操作。字符串是一个特殊的对象,一旦初始化就不可更改。
如:String s1=“abc”;
String s2 = new String(“abc”);
String s3=“abc”;
比较结果:
s1==s2 是false
s1.equals(s2) 是 true
String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。
s1==s3为什么结果是true呢?
因为“abc”这个字符串对象已经存在于内存中了,字符串是特殊的对象,是在常量池中存在的数据;当s3进行初始化时,其发现“abc”已经在内存中存在,那么就不会再独立开辟空间了,所以为了节约内存,在字符串对象当中只要字符串相同,那么就指向同一个对象。
s1和s2的区别:
s1在内存中有一个对象。
s2在内存中有两个对象。
常见功能:
A、获取:
int length():获取字符串长度;
char charAt(int index):根据位置获取位置上某个字符;
int indexOf(int ch):获取字符在字符串中第一次出现的位置,没有找到返回-1;
int index Of(int ch,int fromIndex):从fromIndex制定位置开始,获取ch在字符串中出现的位置;
int indexOf(String str):返回str字符子集的位置;没有返回-1,该方法既可以判断,又可以获取出现的位置;
int lastIndexOf(int ch):返回字符ch最后一次出现的位置。
B、判断
boolean contains(str): 字符串中是否包含某一个子串;
boolean isEmpty():判断字符串长度是否为0;
boolean startsWith(str):字符串是否以制定内容开头;
boolean endsWith(str):字符串是否以制定内容结尾;
boolean equals(str):判断字符串内容是否相同;
boolean equalsIgnoreCase():判断内容是否相容并忽略大小写。
C、转换
构造方法:
String(char[]):使新分配String表示字符数组参数中当前包含的字符序列;
String(char[],offset, count): 分配一个新的 String,它包含取自字符数组参数一个子数组的字符;
静态方法:
static String copyValueOf(char[]):返回指定数组中表示该字符序列的 String;
static String copyValueOf(char[] data, offset, count):返回指定数组中表示该字符序列的String;
static String valueOf(char[]):返回指定数组参数的字符串表示形式;
char[] toCharArray():将此字符串转换为一个新的字符数组;
byte[] getBytes():使用默认字符集将字符串转为byte 数组;
D、替换
String replace(oldchar,newchar):返回一个新字符串,若被替换的字符不存在,返回的还是原字符串;
E、切割
String[] split(regex):将字符串切割成字符串数组;
F、子串,获取字符串中的一部分
String substring(begin);
String substring(begin,end); 注意角标含头不含尾。
G、转换,去空格,比较
String toUpperCase():转成大写;
String toLowerCase():转成小写;
String trim():将字符串两端的多个空格去除;
int compareTo(String):对两个字符串进行自然顺序比较。
2、StringBuffer
1)概述:
字符串的组成原理就是通过该类实现的;StringBuffer是一个容器,可以对字符串内容进行增删。其很多方法与String相同。
2)特点:
A、StringBuffer是可变长度的;
B、可操作多个数据类型;
C、最终通过toString方法变成字符串。
3)常见操作
A、存储
StringBuffer append():将指定数据作为参数添加到已有数据的结尾处;
StringBuffer insert(index ,数据):将数据插入到指定index位置;
B、删除
StringBuffer delete(start,end):删除缓冲区中的数据(含start,不包含end);
StringBuffer deleteCharAt(index):删除指定位置的字符;
清空缓冲区方法:对象.delete(0,对象.length());
C、获取
char charAt(int index):获取index位置上字符;
int indexOf(String str):获取字符在缓冲区中的位置;
int lastIndexOf(String str):反向搜索,最后一次出现的位置;
int length():缓冲区长度;
String substring(int start,int end):返回子串;
D、修改
StringBuffer replace(start,end,String):将指定位置字符替换;
void setCharAt(int index,char ch):将制定位置字符修改成ch;
E、反转
StringBuffer reverse():反转缓冲区;
F、将缓冲区中指定数据存储到指定字符数组中指定位置
void getChars(int srcBegin,int srcEnd,char[]dst,int dstBegin)
4)JDK1.5版本之后出现了StringBuilder,其适用于单线程,StringBuffer是线程同步的,适用于多线程,但是效率低;StringBuilder是线程不同步的,无锁,效率高。以后开发建议使用StringBuilder,多线程自己加锁或者使用StringBuffer。
5)JDK升级三个因素:提高效率,简化书写和提高安全性。
3、基本数据类型对象包装类
将基本数据类型封装成对象就可以在对象中定义更多的功能方法操作该数据。基本数据类型对象包装类的最常见作用就是用于基本数据类型和字符串类型之间做转换。
1)基本数据类型对应的对象包装类:
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Charater
2)基本数据类型转换成字符串:
基本数据类型+“”;
基本数据类型包装类.toString(基本数据类型值);
3)字符串转换成基本数据类型:
基本数据类型包装类.parse基本数据类型(String);
4)十进制转换成其他进制
Integer.toBinaryString(int):转成二进制字符串;
Integer.toHexString(int):转成十六进制字符串;
Integer.toOctalString(int):转成八进制字符串;
5)其他进制转十进制
int parseInt(String,radix);
6)JDK1.5版本出现的新特性:自动装箱
如:Integer x=new Integer(4);其就相当于Integer x=4;自动装箱。
这就比int型多了一个,Integer x= null,可以赋值空。
例:Integerx=128;
Integer y=128;
x==y返回值是false。
Integer m=127;
Integer n=127;
m==n返回值是true。
为什么呢?
因为当数值在byte(-128~127)范围,对于新特性,如果数值已经存在,则不会开辟新的空间。