一 StringBuilder与StringBuffer
StringBuffer -- JDK1.0 出来的,线程是安全的,耗费系统资源
StringBuilder -- JDK1.5出来的,线程不安全,节省系统资源
StringBuilder与StringBuffer都是可变的字符序列(修改的是对象本身)
操作StringBuffer的方法 一般是没有返回值
String线程不安全,不可变的字符序列(不能修改字符串本身)
1).StringBuffer方法
1.创建方式,拼接,获取长度,转字符串
public static void fun1() {
//创建一个StringBuffer对象
StringBuffer sb = new StringBuffer();
//容量 默认容量16
System.out.println(sb.capacity());
//长度
System.out.println(sb.length());
//拼接
StringBuffer buffer = sb.append("wanglong").append(false);
System.out.println(sb);
//StringBuffer转换成 字符串类型
String string = sb.toString();
System.out.println(string);
}
2.插入,修改
public static void fun2() {
//插入
StringBuffer sb = new StringBuffer("wanglong");
sb.insert(4, "da").append("nb");
System.out.println(sb);//"wangdalongnb"
//修改
sb.setCharAt(1, 'x');
System.out.println(sb);"wxngdalongnb"
}
3.删除
删除一段字符时,包头不包尾 (尾坐标可以越界,相当于清空字符串. 起始坐标 >= 0)
删除单个字符时,输入的是要删除的字符的角标
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("wanglong");
//删除 --- 包头不包尾 尾坐标可以越界(相当于清空字符串),起始坐标 >= 0
stringBuffer.delete(0, 4);
System.out.println(stringBuffer);
//注意:传入的是要删除的字符的角标
stringBuffer.deleteCharAt(2);
System.out.println(stringBuffer);
4.字符数组 转化成 StringBuffer对象 -- 先转出字符串类型,再转出StringBuffer对象
char[] array = {'a','b','c'};
String string = String.valueOf(array);
StringBuffer sb = new StringBuffer(string);
System.out.println(sb);
5.反转
public static void fun4() {
//从键盘输入一个字符串 将字符串反转
System.out.println("请输入字符串");
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();//"abcdefg"
//转换成StringBuffer对象
StringBuffer sb = new StringBuffer(string);
//反转
sb.reverse();
System.out.println(sb);//"gfedcba"
}
6.替换
public static void fun5() {
//替换
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("wanglong");
sBuffer.replace(0, 4, "lixiao");//"lixiaolong"
System.out.println(sBuffer);
}
2).三个操作字符串的类 当做参数时的效果
public static void main(String[] args) {
//字符串在当参数的时候,和基本数据类型一样
//值传递 基本数据类型的包装类
String string = "wanglong";
fun1(string);
System.out.println(string);
//相当于传进去的是对象的地址
StringBuffer sBuffer = new StringBuffer("wanglong");
fun2(sBuffer);
System.out.println(sBuffer);
StringBuilder sBuilder = new StringBuilder("wanglong");
fun3(sBuilder);
System.out.println(sBuilder);
}
public static void fun1(String str) {
str = "haha";
}
public static void fun2(StringBuffer sb) {
sb.append("haha");
}
public static void fun3(StringBuilder sb) {
sb.append("haha");
}
3).为什么系统要给基本数据类型增加包装类?
有类 技能增加成员方法,静态方法
public class Demo04 {
public static void main(String[] args) {
// fun1();
//如果值在[-128,127]之间
//实际上 是从 系统已经创建好的数组
//取出一个值给你
//超过这个 范围 会新建一个对象给你
//所以下面的两个对象 地址不同
// Integer.valueOf(10);
Integer num1 = -129;//Integer.valueOf
Integer num2 = -129;//intValue
System.out.println(num1 == num2);
System.out.println(num1.equals(num2));
}
public static void fun1() {
//创建一个Integer
Integer n1 = new Integer(10);
//转化成数字
int i = n1.intValue();
System.out.println(i);
//一般直接用数字来声明
//JDK1.5 自动装箱 和 自动拆箱
//实际上 系统帮你调用了一个方法
//Integer.valueOf()方法
Integer n2 = 10;
//运算的时候 会进行自动拆箱
//n2.intValue()
int sum = n2 + 5;
System.out.println(sum);
}
}