StringBuffer和StringBuilder
StringBuffer与StringBuilder类介绍
StringBuffer是String的对等类,提供了许多字符串功能。您可能知道,String表示长度固定、不可修改的字符序列。与之相对应,StringBuffer表示可增长、可写入的字符序列。StringBuffer允许在中间插入字符和子串,或在末尾追加字符和子串。StringBuffer能够自动增长,从而为这类添加操作准备空间,并且通常预先分配比实际所需更多的字符空间,以允许空间增长。
StringBuilder类是由JDK 5引入的,以增加Java的字符串处理能力,提供与StringBuffer相同的功能。
StringBuffer与StringBuilder的区别:
StringBuffer类是线程安全的,而StringBuilder则不是,即不保证其对象的同步性,在多线程环境中是不安全的。
StringBuilder在性能上要比StirngBuffer好一些。
StringBuffer类的构造方法
StringBuffer( ) //默认预留16个字符的空间
StringBuffer(int size) //size指定预留的字符空间
StringBuffer(String str) //额外预留16个字符的空间 abc+16
StringBuffer(CharSequence chars) //额外预留16个字符的空间
提示:
再次分配内存空间是很耗时的操作。此外,频繁分配空间会产生内存碎片。
StringBuffer类的常用方法
1.append ()
append()方法将各种其他类型数据的字符串表示形式连接到调用StringBuffer对象的末尾。该方法有多个重载版本,下面是其中的几个:
StringBuffer append(String str)
StringBuffer append(int num)
StringBuffer append(Object obj)
2.insert ()
在指定位置插入参数提供的内容,返回修改后的该StringBuffer对象引用。该方法有多个重载版本,下面是其中的几个:
StringBuffer insert(int index, String str)
StringBuffer insert(int index, char ch)
StringBuffer insert(int index, Object obj)
3.StringBuffer delete (int start,int end) 10 包含5 不包含10
删除从start开始到end-1为止的一段字符序列,返回修改后的该StringBuffer对象引用。
4.StringBuffer deleteCharAt(int index) 8
移除指定位置的字符,返回修改后的该StringBuffer对象引用。
5.StringBuffer reverse()
将字符序列逆序,返回修改后的该StringBuffer对象引用。
6.StringBuffer setCharAt( (int index,char ch) 5 a
将指定索引处的字符设置为 ch,返回修改后的该StringBuffer对象引用。
public static void main(String[] args){
StringBuffer sb = new StringBuffer();
sb += “I”;
sb.append(“am”);
sb.append(true);
System.out.println(sb);
}
几点说明:
(1)StringBuffer对象不能使用 += 赋值
(2)注意使用StringBuffer的append()方法连接字符串与使用“+”运算符直接连接String对象的区别。
案例:StringBufferDemo
长度与容量的概念
长度是指StringBuffer中实际保存的字符的个数,容量是指已经分配的空间大小。
1.int length()
获取StringBuffer对象的当前长度
2.void setLength(int len) 50 20 6 50 10
设置StringBuffer对象中字符串的长度。当增加字符串的大小时,会向末尾添加空字符。如果调用setLength()时使用的值小于length()返回的当前值,则超出新长度的字符将丢失。
3.int capacity( )
获取StringBuffer对象的当前容量
4.void ensureCapacity(int minCapacity)
设置缓存的大小。minCapacity指定了缓存的最小尺寸。(出于效率考虑,可能会分配比minCapacity更大的缓存。)
扩容后的数组长度为字节数组定长*2 +2 ,扩容不够时直接扩容到最大(指定大小)。
Math类
常用方法
abs(a)返回绝对值
max(a,b)返回较大值
min(a,b)返回较小值
Random类
常用方法
nextInt(a)生成并返回0~a之间的整数,不包含a
Date类
Date类封装了当前日期和时间。位于java.util包。
(1)类构造方法
public Date() //使用当前日期和时间初始化对象
public Date(long date) //参数date为自从1970年1月1日子时经历的毫秒数
(2)常用方法
long getTime() | 返回从1970年1月1日午夜开始已经流逝毫秒数 |
void setTime(long time) | 将日期和时间设置为time所指定的值,time是是自从1970年1月1日午夜开始已经流逝的毫秒数 |
String toString() | 将调用Date对象转换成字符串并返回结果 |
(3)Date类示例
package com.bw;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d);
//System.out.println(d.toLocaleString());
long time1 = d.getTime();//1970-1-1 00:00:00 GMT 到现在的 总毫秒数
System.out.println(time1);
long time2 = System.currentTimeMillis();
System.out.println(time2);//1970-1-1 00:00:00 GMT 到现在的 总毫秒数
Date d2 = new Date(time2);
System.out.println(d2);
}
}
Calendar与GregorianCalendar类
Calendar是抽象类,提供了一套方法将毫秒数形式的时间转换成大量有用的组分,例如年、月、日、小时、分和秒。
GregorianCalendar是Calendar的具体实现,它实现了您熟悉的常规的格林尼治日历。Calendar类的getInstance()方法通常会返回一个使用默认地区和时区下的当前时间初始化的GregorianCalendar对象。
SimpleDateFormat类
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
1.字符串转日期 2008-07-10 19:20:00 要把它转成日期,可以用
sf.format(date)
2. 日期转字符串假如把今天的日期转成字符串可用 String str = sf.format(new Date());
3. 这个字符串内容的格式类似2008-07-10 19:20:00。
JDK1.8新增日期常量类
Jdk1.8新增三大日期常量类,与String类相同都是通过final来修饰,线程安全。
LocalDate:表示日期(年月日)
LocalTime :表示时间(时分秒)
LocalDateTime:表示时间+ 日期 (年月日时分秒),是java8最常用的日期类