一、String相关类
三者执行速度:StringBuilder > StringBuffer > String
1.1、String
每次对 String 类型改变的时,都会生成一个新的 String 对象,指针指向新的 String 对象。
适用于字符串不常变的,少量的数据场景中,例如常量的声明、少量的变量运算...等。
1.2、StringBuilder
对象可以直接进行修改,不会生成新的对象。
适用于单线程频繁进行字符串运算(如拼接、替换、和删除等),如SQL语句的拼装、JSON封装...等。
1.3、StringBuffer
每次都对对象本身进行操作,不是生成新的对象。对方法加了同步锁(synchronized)或对调用的方法加了同步锁,线程安全。
适用于多线程频繁进行字符串运算(如拼接、替换、和删除等),如XML解析、HTTP参数解析和封装...等。
二、Java8新增的日期类
2.1、Clock
用于获取指定时区的当前日期、时间。该类可以取代System类的currentTimeMillis()方法。
//获取当前Clock
Clock clock = Clock.systemUTC();
//获取clock对应的毫秒数
//等于System.currentTimeMillis()
System.out.println(clock.millis());
System.out.println(System.currentTimeMillis());
2.2、Duration
持续时间
Duration d = Duration.ofSeconds(600);
System.out.println("600秒="+d.toMinutes()+"分");
System.out.println("600秒="+d.toHours()+"时");
System.out.println("600秒="+d.toDays()+"天");
2.3、Instant:
一个具体的时刻,可以精确到纳秒。
1)now():获取当前时刻。
2)now(Clock clock):获取clock对应的时刻。
3)minusXxx():在当前时刻基础上减去一段时间。
4)plusXxx():在当前时刻基础上加上一段时间。
//获取当前时间
Instant instant = Instant.now();
System.out.println(instant);
//instant增加600秒
Instant instant2 = instant.plusSeconds(600);
2.4、LocalDate
代表不带时区的日期,如:2019-02-24。
1)now():获取当前日期。
2)now(Clock clock):获取clock对应的日期。
3)minusXxx():在当前年份基础上减去几年、几月、几周或几日等。
4)plusXxx():在当前年份基础上加上几年、几月、几周或几日等。
2.5、LocalTime
代表不带时区的时间,如:10:20:09。
1)now():获取当前时间。
2)now(Clock clock):获取clock对应的时间。
3)minusXxx():在当前年份基础上减去几小时、几分、几秒等。
4)plusXxx():在当前年份基础上加上几小时、几分、几秒等。
2.6、LocalDateTime
代表不带时区的日期、时间,如:2019-02-24T10:20:09。
1)now():获取当前日期、时间。
2)now(Clock clock):获取clock对应的日期、时间。
3)minusXxx():在当前年份基础上减去几年、几月、几周或几日、几小时、几分、几秒等。
4)plusXxx():在当前年份基础上加上几年、几月、几周或几日、几小时、几分、几秒等。
2.7、MonthDay
仅代表月日,如:--09-20。
1)now():获取当前月日。
2)now(Clock clock):获取clock对应的月日。
2.8、Year
仅代表年,如:2019。
1)now():获取当前年份。
2)now(Clock clock):获取clock对应的年份。
3)minusXxx():在当前年份基础上减去几年。
4)plusXxx():在当前年份基础上加上几年。
2.9、YearMonth
仅代表年月,如:2019-02。
1)now():获取当前年月。
2)now(Clock clock):获取clock对应的年月。
3)minusXxx():在当前年份基础上减去几年、几月。
4)plusXxx():在当前年份基础上加上几年、几月。
ZonedDateTime:有时区的日期时间。
ZonedId:代表一个时区。
DayOfWeek:枚举类,定义了周一到周日的枚举值。
Month:、枚举类,定义了一月到十二月的枚举值。
三、计算问题和引用
3.1、BigDecimal
金钱应采用java.math.BigDecimal存储;
BigDecimal入库时,选decimal类型,注意默写成0.00,不要用默认的NULL。
使用BigDecimal(String val) 创建对象,如BigDecimal numA=new BigDecimal("0.6");,
不要用参数为float、double 创建对象,如BigDecimal numA=new BigDecimal(0.6);
用参数为float、double 创建对象会丢失精度。
3.2、SoftReference 软引用
static SoftReference<List<String>> cacheList = new SoftReference<List<String>>(Arrays.asList("AAA","BBB","CCC"));
public static void main(String[] args) {
List<String> myList = cacheList.get();
for (String str : myList) {
System.out.println(str);
}
}