Stringbuffer
1.字符串的缓冲区(容器)
2.长度是可以变化的
3.可以存储任意数据类型,内部先将数据转成字符串再存储
可以 添加,插入,修改,删除
例:
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();//默认初始容量,16,如果存储数据超过了16,自动开辟新的空间,是原来长度的一倍
//添加数据 append(追加)
sb.append("abc");
sb.append(true);
sb.append(1);
//将toString方法进行了重写
//想要快速获取方法的返回值 使用ctrl+1快速得到方法的返回值
// StringBuffer a = sb.append(false);
// a.append(b);
// 方法调用链
String str = sb.append("a").append("a").append(false).toString();
// 添加数据,不断的添加数据之后,要对缓冲区的最后数据做操作,必须要转成字符串类型
System.out.println(str);
//插入数据
sb.insert(2, "你吃饭了吗");
System.out.println(sb.toString());
//删除数据
sb.delete(0, 2);//删除掉的是0和1的数据
System.out.println(sb.toString());
// 修改(替换)
sb.replace(0, 1, "没吃");
System.out.println(sb.toString());
String str2 = "这是"+true;
//内部创建StringBuffer或者StringBuilder对象,调用append方法
StringBuffer sb2 = new StringBuffer();
String s = sb2.append("这是").append(true).toString();
}
StringBuilder和StringBuffer的区别
多个人在操作同一个StringBuffer对象
添加
删除
替换
StringBuffer:线程安全,同步,效率偏低
StringBuilder:没有锁,单线程访问效率更高
Math类
例:
public static void main(String[] args) {
//获取随机数
double d = Math.random();
// System.out.println(d);//获取0.0-1.0的任意数
//获取1-6之间的随机数
for(int x=0;x<10;x++){
double dd = Math.random()*6+1;//自动转换
int i = (int)dd;//取整 double八个字节 int四个字节 强制转换
// System.out.println(i);
}
Random random = new Random();
//从int类型返回值内随机返回一个数
// System.out.println(random.nextInt());
for(int x=0;x<10;x++){
System.out.println(random.nextInt(7));//0-5
}
}
包装类转换
基本数据类型(+ - * / …) | 对象(包装类) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
public static void main(String[] args) {
//基本数据类型和字符串之间的转换
// 字符串 ---->基本数值 int (String)
System.out.println("123"+1);//1231
// 结果124
int t = Integer.parseInt("123")+1;
System.out.println(t);
//parseXxx
// Double.parseDouble("");
// int t1 = Integer.parseInt("123a")+1;
// System.out.println(t1);
// 基本数值 ----> 字符串
System.out.println(11+11);//22 加法运算
//1111
System.out.println(11+""+11);//1111 字符串拼接 不推荐使用
// String
String str = String.valueOf(11);//11--->"11"
// Integer
String str2 = Integer.toString(11);//11---->"11"
//基本数值 ----> 包装对象
Integer i = new Integer(5);//将基本数据类型5 转成了对象
Integer valueOf = Integer.valueOf(1);
//包装对象 --->基本数值
int intValue = i.intValue();//将对象转成基本数据类型
}
自动装箱和拆箱
public static void main(String[] args) {
int a = 4;//基本数据类型
Integer i = new Integer(4);//包装对象
// jdk1.5之后 简化书写
Integer ii = 4; //自动装箱
Integer valueOf = Integer.valueOf(4);//内部实现
ii = ii+1;//值+值
// 1.因为是做加法运算,所以第一步会将ii转成基本数值 ,自动拆箱
// 2.转为基本数值 4 +1 变为5
// 3.因为要赋值给Integer 所以需要自动装箱
// int b= ii.intValue()+1;
// Integer.valueOf(b);
Integer i3 = new Integer(3);
Integer i4 = new Integer(3);
System.out.println(i3==i4);//地址 false
System.out.println(i3.equals(i4));//true Integer也重写Object中的equals 比较两个对象内容是否相同
Integer i5 = new Integer(100);
Integer i6 = new Integer(100);
System.out.println(i5==i6);//false
System.out.println(i5.equals(i6));//true
Integer i7 = 127;
Integer i8 = 127;
// 在自动装箱的时候,如果给的数值在byte范围(-128到127)之内,不会创建新内存空间而是使用原来已有的空间
System.out.println(i7==i8);//false
System.out.println(i7.equals(i8));//true
}