/* 二、剖析
* String str = new String("abc"); // char[] value = new char[]{'a','b','c'}
* String str1 = new String(); // char[] value = new char[0];
*
* StringBuffer sb = new StringBuffer("abc");//char[] value = new char["abc".length + 16]
* //value[0] = 'a',value[1] = 'b',value[2] = 'c';
*
* StringBuffer sb1 = new StringBuffer();//char[] value = new char[16];
*
* sout(sb1.length());//0
*
* sb.append("m");//value[3] = 'm'
* ...
* 可能添加的数据较多,导致底层value数组长度不够,此时需要扩容。默认扩容为原来的2倍+2
*/
1.3 启示
/* 三、开发的启示
* ① 开发中如何频繁的对字符串进行拼接、删除、修改操作等,建议使用StringBuffer或StringBuilder
* ② 如果操作字符串的线程不涉及到多线程问题,那么建议使用StringBuilder
* ③ 如果项目中操作的字符串整体的长度基本确定,建议使用指定capacity参数的构造器,创建StringBuffer或StringBuilder
* 比如:StringBuffer(int capacity)可以使用:StringBuffer s = new StringBuffer(30);
* 对应的,底层创建的数组为:char[] value = new char[30]; 避免不必要的扩容。
*/
/**
* 三者的效率从高到低排列:
* StringBuilder > StringBuffer > String
*/@Testpublicvoidtest3(){//初始设置long startTime =0L;long endTime =0L;
String text ="";
StringBuffer buffer =newStringBuffer("");
StringBuilder builder =newStringBuilder("");//开始对比
startTime = System.currentTimeMillis();for(int i =0; i <20000; i++){
buffer.append(String.valueOf(i));}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:"+(endTime - startTime));
startTime = System.currentTimeMillis();for(int i =0; i <20000; i++){
builder.append(String.valueOf(i));}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:"+(endTime - startTime));
startTime = System.currentTimeMillis();for(int i =0; i <20000; i++){
text = text + i;}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:"+(endTime - startTime));}
2. jdk8之前日期时间的api
2.1 System的currentTimeMillis()
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
此方法适于计算时间差。
计算世界时间的主要标准有:
UTC(Coordinated Universal Time)
GMT(Greenwich Mean Time)
CST(Central Standard Time)
2.2 两个Date
@Testpublicvoidtest1(){//java.util.Date://1. 两个构造器
Date date1 =newDate();//获取系统的当前时间
Date date2 =newDate(23452345324L);//2. 两个方法//toString():
System.out.println(date1.toString());//Wed Mar 24 10:26:08 CST 2021//getTime():获取date对象对应的毫秒数
System.out.println(date1.getTime());//1616552822058
System.out.println(System.currentTimeMillis());//测试date2
System.out.println(date2);
System.out.println(date2.getTime());//23452345324}//测试java.sql.Date@Testpublicvoidtest2(){
java.sql.Date date1 =newjava.sql.Date(3142134234L);
System.out.println(date1.toString());//1970-02-06
System.out.println(date1.getTime());//3142134234//练习:如何将一个util包下的Date实例转换为sql包下的Date实例?//错误:// Date date2 = new Date();// java.sql.Date date3 = (java.sql.Date)date2;//正确的:
Date date2 =newDate();
java.sql.Date date3 =newjava.sql.Date(date2.getTime());//类比:// Object obj = new Object();// String s = (String)obj;// long l = 132213213L;// int i = (int)l;//// int j = 12312;// long l1 = j;// int k = (int)l1;}
2.3 Calender
//Calendar:日历类@Testpublicvoidtest3(){//1.实例化
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);//2. 常用方法//get():获取指定的属性信息int year = calendar.get(Calendar.YEAR);
System.out.println(year);int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);//set():设置指定的属性信息
calendar.set(Calendar.DAY_OF_MONTH,12);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);//add():
calendar.add(Calendar.DAY_OF_MONTH,-5);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);//getTime(): calender得到Date的实例
Date date = calendar.getTime();
System.out.println(date);//setTime():使用指定的Date,重置calendar
calendar.setTime(newDate());
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);}