StringBuffer
JDK1.0出来的线程安全 耗费系统资源
StringBuilder
JDK1.5出来的线程不安全 节省系统资源
StringBuffer和StringBuilder
都是可变的字符序列(修改的是对象本身)
操作StringBuffer的方法 一般是没有返回值
String
线程不安全的不可变的字符序列(不能修改字符串本身)
方法
1.拼接 2.插入 3.删除 4.反转 5.替换
6.string与StringBuffer的相互转换
public class Demo02{
public static void main(String[] args) {
//fun1();
//fun2();
//fun3();
//fun4();
//替换
StringBuffer sb=new StringBuffer();
sb.append("aassddff");
sb.replace(0, 4, "zzxx");
System.out.println(sb);
}
private static void fun4() {
//键盘输入一个字符串 将字符串反转
System.out.println("请输入一个数");
Scanner scanner=new Scanner(System.in);
String string=scanner.nextLine();
//转换成StringBuffer对象
StringBuffer sb=new StringBuffer(string);
//反转
sb.reverse();
System.out.println(sb);
}
private static void fun3() {
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("zhangsan");
//删除 留头不留尾
//传入结束坐标>字符串的长度 相当于清空字符串
stringBuffer.delete(0, 5);
System.out.println(stringBuffer);
//注意:传入是要删除的字符的角标
stringBuffer.deleteCharAt(1);
System.out.println(stringBuffer);
//获取stringBuffer中的字符
char c = stringBuffer.charAt(1);
System.out.println(c);
//字符数组 转化成 stringBuffer对象
char[] array= {'a','b','c'};
String string=String.valueOf(array);
StringBuffer sb=new StringBuffer(string);
System.out.println(sb);
}
private static void fun2() {
//插入
StringBuffer sb=new StringBuffer("zhangsan");
sb.insert(5, "da").append("nb");
System.out.println(sb);
//修改
sb.setCharAt(1, 'x');
System.out.println(sb);
}
private static void fun1() {
//创建StringBuffer对象
StringBuffer sb=new StringBuffer();
//容量 默认容量16
System.out.println(sb.capacity());
//长度
System.out.println(sb.length());
//拼接
sb.append("zhangsan").append(false);
System.out.println(sb);
//StringBuffer转换成 字符串类型
String string = sb.toString();
}
}
String StringBuffer StringBuilder
三个操作字符串的类 当做参数时的效果
public class Demo03 {
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");
}
public static void main(String[] args) {
//三个操作字符串的类 当做参数时效果
//字符串在当参数的时候 和基本数据类型一样
//值传递 基本数据类型的包装类
String string="zhangsan";
fun1(string);
System.out.println(string);
//相当于传进去的是对象地址
StringBuffer sb=new StringBuffer("zhangsan");
fun2(sb);
System.out.println(sb);
StringBuilder sb1=new StringBuilder("zhangsan");
fun3(sb1);
System.out.println(sb1);
}
}
为什么系统要给基本数据类增加包装类?
有类能增加成员方法 静态方法
功能进行扩展
public class Demo04 {
public static void main(String[] args) {
//fun1();
//valueOf intValue
//如果值在[-128,127]之间
//实际上是从系统已经创建好的数组
//取出一个值给你
//超过这个范围 会新建一个对象给你
//所以下面的两个对象 地址不同
Integer num1=128;
Integer num2=128;
System.out.println(num1==num2);
System.out.println(num1.equals(num2));
}
private static void fun1() {
//创建一个integer
Integer n1=new Integer(10);
//转化成数字
int i=n1.intValue();
System.out.println(i);
//一般直接用数字来声明
//JDK1.5 自动装箱和自动拆箱
//实际上系统帮你调用一个方法
//Integer.valueOf(10)方法
Integer n2=10;
//运算的时候会进行自动拆箱
//n2.intValue
int sum=n2+5;
System.out.println(sum);
}
}
集合
集合(容器)
1.单列集合
2.双列集合
集合为什么会出现?
数组有什么弊端
1.长度一旦确定 不能变了
2.只能保存相同数据类型的元素
集合的好处
1.长度可变
2.可以存放不同类型元素
注意:集合中只能存储引用类型(对象类型)
获取集合的长度
判断是否包含某个元素
从集合中删除一个元素
判断集合是否为空
清空数组
集合转数组
public class Demo02集合方法 {
public static void main(String[] args) {
//多态的形式创建
Collection collection=new ArrayList();
boolean b1 = collection.add("a");
boolean b2 = collection.add("b");
boolean b3 = collection.add("c");
//当你直接向集合中存储基本数据类型的时候
//系统会帮你进行自动装箱
//设计思想 返回值 能够适用下面的所有子接口
//Set集合 是有可能添加失败的
boolean b4 =collection.add("d");//可以把"d"换成10或false
System.out.println(b1);
//获取元素个数
System.out.println(collection.size());
//判断包含
boolean rel1 = collection.contains("a");
System.out.println(rel1);
//删除元素
boolean rel2 = collection.remove("b");
System.out.println(rel2);
System.out.println(collection);
//判断是不是空的集合
boolean rel3 = collection.isEmpty();
System.out.println(rel3);
System.out.println(collection);
//集合转数组
Object[] array = collection.toArray();
for (Object object : array) {
System.out.println(object);
}
//清空数组
collection.clear();
System.out.println(collection);
}
}