String

String是一个final类,代表不可变的字符序列;

字符串是常量,用双引号括起来表示,他们的值在创建后不能更改;

String对象的字符内容是存储在一个字符数组value[ ]中的;

String实现了Serializable接口:表示字符串是支持序列化的;

实现了Comparable接口:表示String可以比较大小;

String内部定义了 final char[ ] value用于存储字符串数据;

通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中;

字符串常量池中是不会存储相同内容的字符串;

当调用String replace( )方法修改指定字符或字符串时,需要重新指定内存区域赋值,不能在原有的value上进行赋值;

创建字符串的常见3+1种方式

三种构造方法:1. Public String( );创建一个空白字符串,不含有任何内容;

2. Public String( char[ ] array);根据字符数组的内容,来创建对应的字符串;

3. Public String (byte[ ] array) ;根据字节数组的内容来创建对应的字符串;

一种直接创建;

Public Static void main (String[] args){
//使用空参构造;
String str1 = new String( );
//根据字符数组创建字符串;
char[ ] charArray = {'a','b','c'};
String str2 = new String(charArray);
//根据字节数组创建字符串;
brte[ ] byteArray ={97,98,99};
String str3 = new String(byteArray);
//直接创建;
String str4 = "hello";
}

字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中;

对于基本类型来说:== 是进行数值的比较;

对于引用类型来说:==是进行地址值的比较;

//判断
String s1 = "hello";
String s2 = "world";
String s3 = "hello" + "world";
String s4 = s1 + "world";
String s5 = s1 + s2;
String s6 = (s1+s2).inter();
System.out.printfln(s3==s4);//flase
System.out.printfln(s3==s5);//flase
System.out.printfln(s4==s5);//flase
System.out.printfln(s3==s6);//true
结论

- 常量与常量的拼接结果在常量池中;且常量池中不会存在相同内容的常量;
- 只要其中有一个是变量,结果就在堆中;
- 如果拼接的结果调用intern( )方法,返回值就在常量池中;


字符串的截取方法

Public String substring (int beginindex);截取从参数位置一直到字符串末尾,返回新字符串;

Public String substring (int beginIndex,int endIndex):截取从beginIndex开始,一直到endIndex结束,中间的字符串(左闭右开区间);

String当中获取相关的常用方法

int length( ):获取字符串当中含有的字符个数,拿到字符串长度;

String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串,等价于”+“;

char charAt(int index):获取指定索引位置的单个字符(索引从0开始);

int indexOf(String str):查找参数字符串在本字符串中首次出现的索引位置,如果没有,返回-1值;

boolean isEmpty( ):判断是否是空字符串;

String toLowerCase( ):使用默认语言环境,将String中的所有字符转换成小写;

String toUpperCase( ):使用默认语言环境,将String中的所有字符转换成大写;

String time ( ):返回字符串的副本,忽略前导空白和尾部空白;

boolean equals( Object obj ) :比较字符串的内容是否相等;

boolean equalsIgnoreCase (String anotherString):与equals方法相类似,忽略大小写;

int compareTo ( String anotherString):比较两个字符串的大小;

boolean endWith (String suffix):测试此字符串是否可以指定的后缀结束;

boolean StartWith( String prefix):测试此字符串是否可以指定的前缀开始;

boolean StartWith( String prefix ,int toffset):测试此字符串从指定索引开始的字符串是否以指定前缀开始;

String 、StringBuffer 、StringBuilder三者的区别

String:不可变字符序列;底层使用char[ ]存储;

StringBuffer:可变的字符序列,线程安全,效率低,底层使用char[ ]存储;

StringBuilder:可变的字符序列,线程不安全,效率高,底层使用char[ ]存储;

字符序列;底层使用char[ ]存储;

StringBuffer:可变的字符序列,线程安全,效率低,底层使用char[ ]存储;

StringBuilder:可变的字符序列,线程不安全,效率高,底层使用char[ ]存储;

三者的效率:StringBuilder > StringBuffer > String