Java中String
Outline
一.实例化。
1.方式
(1).直接赋值:String str = “hello world”;
(2).new实例化:String str1 =new String("hello world");
2.区别
(1).如果采用直接赋值方式为字符串创建实例化对象:JVM底层会自动维护一个对象池(字符串对象池),那么该对象会自动保存在这个对象池之中。如果下次继续采用直接赋值的方式创建String对象,会首先比较对象池中有没有指定内容,若有,则直接使用。如果对象池中没有指定内容,则开辟新的空间来容纳新的字符串对象而后自动保存在对象池中,以便下次使用。
(2).构造方法实例化对象
a.采用构造方法创建String实例化对象时,每new一个,在堆上会开辟两块空间,有一块是垃圾空间。
b.采用构造方法产生的字符串不会自动入池。
c.String提供手工入池操作.intern()。
二.字符串的比较
1.== 址比较。
2.值比较
(1).boolean equals():区分大小写方法
(2).booleanequalsIgnoreCase():不区分大小写比较
( 3).intcompareTo(String str):
a.>0:表示本字符串大于指定字符串
b.=0:表示两个字符串相等
c.<0:表示本字符串小于指定字符串。
三.常见用法
1.char[]->String:
publicString(char[]);
2.取的制定索引字符(********)
publicchar charAt(int intdex):取得字符串指定索引字符
3.String->char[]:
publicchar tocharArray():
字节(byte)与字符串(String)的常用方法:
1.byte[]->String:
publicString(byte[],编码名称):将指定字节数组变为字符串。
2.String->byte[]:
publicbyte[] getBytes():将字符串对象转化为byte数组。
3.String->byte[]:
publicbyte getBytes(String charName):将指定字符串按照相应编码转化为字节数组。
字符串比较:
1.booleanequals():区分大小写方法
2.booleanequalsIgnoreCase():不区分大小写比较
3.intcompareTo(String str):
a.>0:表示本字符串大于指定字符串
b.=0:表示两个字符串相等
c.<0:表示本字符串小于指定字符串。
字符串查找:从完整字符串中判断指定字符串是否在存在(*****)
1.(*****)
public boolean contains(String str):判断一个字符串str在本字符串是否存在
2.从头开始查找指定字符串位置
publicint indexOf(String str):从头开始查找str的位置,找到返回str索引下标,没找到返回-1.
3.从后开始查找指定字符串位置
publicint lastIndexOf(String str):从后开始查找str的位置,找到返回str索引下标,没找到返回-1.
4.判断是否以指定字符串开头
publicboolean startsWith(String str):判断是否以str开头。
5.判断是否以指定字符串结尾
publicboolean endsWith(String str):判断是否以str结尾。
字符串替换:
replace(String reg,String rep):将本字符串第一个出现reg的字符串替换称rep。
replaceAll(String reg,String rep):将本字符串出现reg的字符串替换称rep。
字符串拆分:
publicString[]spilt()
字符串截取:
publicString substring()
首字母大写:str.substring(0,1).toUpperCase()+str.substring(1);
字符串其他操作:
判断字符串是否有内容:
if(!(str==null||str.isEmpty())){
//str有内容
}
trim():去掉字符串中的空格,去掉字符串左右两边空格,中间的空格还是保留;
注意:字符串常量不可变更:在定义字符串常量时,它的内容不可变更(变的是引用)。使用字符串时,尽量少变更。(+操作最多执行3次)。
四.String与StringBuilder,StringBuffer的比较
1.String类内容不变,俩StringBuilder,StringBuffer内容可变
2.StringBuffer采用同步处理,线程安全,效率较低
3.StringBuilder采用异步处理,线程不安全,效率高。
(String类的修改操作“+”,JVM底层会将String变为StringBuilder类处理,减少大量垃圾空间)