一、String 类
java 没有内置的字符串类型,但是在lang 包中提供了String类来创建和操作字符串,可以发现C# 中定义字符串时,string 第一个字母时小写的。
java中定义一个子符串,注意 双引号括住该值,实际上括住的一串字符就是String 对象。
注意:
字符串变量必须经过初始化才能使用。
字符串对象一旦被创建,其值时不能改变的,但可以使用其他变量重新赋值的方式进行更改。
声明 和赋值 要分开赋值的话要放在方法里
通过构造方法赋值
String 既然是个类,也可以通过构造方法,来创建字符串,那么也就有多中重载形式
1、String() 初始化一个新建的String对象,表示一个空字符序列,
2、String(String original)新创建的String 对象是该字符串的副本,创建的字符串与通过参数赋予的值相等
3、String(chat[] value) 将参数中的字符串数组元素全部变成字符串,
4. String(char[] value,int offset,int count)
offset 表示从那开始截,count 表示截取几个,注意 offset + count 不能大于数组的总长度,否则会报错
报错 字符串 下标越界, 可以看出提示错误信息: 6 大于 5 , 在第七行
字符串与其他类型的转换
其他类型与子符串的相互转换,上一篇也有介绍
package com.obge.test1;
public class SrtingStu {
public static void main(String[] args) {
//字符串转换为 int 这个时候string就不能乱赋值了,
String sInt = "121";
//1、借助 parseInt()
int intP = Integer.parseInt(sInt);
//2、valueOf() 和 intValue
int intV = Integer.valueOf(sInt).intValue();
System.out.println(intP);
System.out.println(intV);
//int 转化为字符串
int intConvertString = 111;
//1、借助 toString()
String tos = Integer.toString(intConvertString);
//2、借助 valueOf() 要赋值,不然包空指针错误
String vos = String.valueOf(intConvertString);
//3、借助 + 耗时较长
String sin = intConvertString +"";
System.out.println(tos);
System.out.println(vos);
System.out.println(sin);
}
}
valueOf() 一个静态方法,将数据的内部格式转换为可读的形式,对于所有java 内置的类型,都可转换为字符串。
二、使用StringBuffer 类处理字符串
StringBuffer 也可以用来存储字符串,比String 类更高效的存储字符串的一种引用数据类型,特别是对字符串进行连接操作时,使用StringBuffer 类可以大大提高程序的执行效率。
1、使用StringBuffer 类
StringBuffer 类位于java.util包中,是String 类的增强类。
声明StringBuffer 类并初始化
StringBuffer stringBuffer = new StringBuffer("obge");
2、StringBuffer 类常用方法
String toString() : 转换为String 类型的对象并返回
StringBuffer append(参数); 追加字符串,将参数连接到字符串后并返回。
append() 方法与concat() 方法:
相同点:都是把一个字符串追加到另一个字符串后。
不 同:的是String类中只能将String类型的字符串追加到另一个后面,StringBuffer类中可以将任何类型的值追加到字符串后。
StringBuffer insert() : 插入字符串
字符串 . insert(位置,参数);
//将参数插入到指定位置后并返回stringBuffer 类型,参数值可以是包括任何类型的值
在StringBuffer类中的定义:使用synchronized修饰
例子:
package com.obge.test1;
public class StringStu2 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("obge哥哥");
int num = 2223;
//使用 append 追加
StringBuffer stringBufferAppend = stringBuffer.append(num);
System.out.println("现在的字符串为:"+stringBufferAppend);
//每隔2 位 添加 *
for(int i= stringBufferAppend.length()-2;i>0;i=i-2){
stringBufferAppend.insert(i,"*");
}
System.out.println("添加*后的字符串为:"+stringBufferAppend);
}
}
控制台输出内容:
三、使用StringBuilder 类处理字符串
StringBuilder 位于Java.lang 包中,是JDK 5.0 新增的类,是一个可变的字符序列。此类提供了一个与StringBuffer 兼容的API ,被设计用作StringBuffer的一个简易替换,在大多数实现中,比StringBuffer 执行要快。
StringBuilder 类处理字符串方法与StringBuffer类基本一致
注意哦 没有 synchronized,不提供同步,单线程的
四、String类、StringBuffer类以及StringBuilder类对比
String 类:是不可变的对象,在每次对String 类型进行改变时等同于生成了一个新的String 对象,然后指向新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响。
StringBuffer类:时可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer 对象本身进行操作,而不是生成新的对象,在改变对象引用。所以在字符串经常改变的情况下推荐使用StringBuffer 类。
在字符串连接操作中,StringBuffer 类的执行效率比String类高
通过 + 号来进行追加子符串操作时,实际是通过建立一个StringBuffer 对象,让他调用append() 方法,最后在转化为String ,比StringBuffer 多了一些附加操作所以效率低,而且String对象的不可变性也比较影响性能。
StringBuilder 类:是单线程的不提供同步,理论上比StringBuffer效率更高。但是StringBuffer是线程安全的。
这和引用类型与基本类型的存储有点相似