一,String详解
在你申明一个String的变量时,java会检查常量池中是否有这个常量存在。如String a="ABC";第一次申明时,会在常量池中添加“ABC”这个常量,然后再把引用地址赋予a变量。当你new一个变量时String是在堆中新开了一片内存,这里引用路径不同了。
不论是String c=“A”+“BC”还是String d=“A”+"b"+"c"都是常量拼接而成,在检查是否存在时,会先拼接起来在到常量池中检测是否存在,存的话在返回引用地址,不存在便加入池中。b.intern()方法这个方法有些特殊,先提取变量中的值,然后对比常量池是否存在,存在就返回引用地址。String g=f+"bc";这里因为编程在编译时无法知道f的值是什么,所以重新在常量池中加入了一个值。
代码:
String a="ABC";
String b=new String("ABC");
String c="A"+"BC";
String d="A"+"B"+"C";
String e=b.intern();
String f="A";
String g=f+"bc";
//false
System.out.println(a==b);
//true
System.out.println(a==c);
//true
System.out.println(a==d);
//true
System.out.println(c==d);
//true
System.out.println(e==a);
//false
System.out.println(g==a);
测试:
String,StringBuilder,StringBuffer。String +编译时会调用StringBuild。例如
String a=b+“c”;在编译时会调用a=(new StringBuilder (String.valueof(b)).append("c").toString())。所以当你在循环中使用拼接时会创建许多的StringBuilder对象,尽量避免在循环中使用String a=b+“c”;这样或者sb.append(b+"c")的形式。
二,Java中获取日期或者时间
(1)如何获取当前时间
代码:
Calendar calendar=Calendar.getInstance();
//年
calendar.get(calendar.YEAR);
System.out.print(calendar.get(calendar.YEAR)+"年");
//月
calendar.get(calendar.MONTH);
System.out.print(calendar.get(calendar.MONTH)+1+"月");
//日
calendar.get(calendar.DAY_OF_MONTH);
System.out.print(calendar.get(calendar.DAY_OF_MONTH)+"日");
//时
calendar.get(calendar.HOUR_OF_DAY);
System.out.print(calendar.get(calendar.HOUR_OF_DAY)+"时");
//分
calendar.get(calendar.MINUTE);
System.out.print(calendar.get(calendar.MINUTE)+"分");
//秒
calendar.get(calendar.SECOND);
System.out.println(calendar.get(calendar.SECOND)+"秒");
//java1.8
LocalDateTime dt = LocalDateTime.now();
System.out.println(dt.getYear());
System.out.println(dt.getMonthValue()); // 1 - 12
System.out.println(dt.getDayOfMonth());
System.out.println(dt.getHour());
System.out.println(dt.getMinute());
System.out.println(dt.getSecond());
测试:
(2)如何获取时间轴0点到当前时间的差
代码:
//第一种
System.out.println(System.currentTimeMillis());
//第二种
System.out.println(Calendar.getInstance().getTimeInMillis());
//第三种
System.out.println(Clock.systemDefaultZone().millis());
测试:
(2)获取当前月的第一天和最后一天
代码:
//获取当前月第一天:
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
String first = format.format(c.getTime()); System.out.println("===============first:"+first);
//获取当前月最后一天 9. Calendar ca = Calendar.getInstance();
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String last = format.format(ca.getTime());
System.out.println("===============last:"+last);
//Java 8
LocalDate today = LocalDate.now();
//本月的第一天
LocalDate firstday = LocalDate.of(today.getYear(),today.getMonth(),1);
//本月的最后一天
LocalDate lastDay =today.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("本月的第一天"+firstday); 21.System.out.println("本月的最后一天"+lastDay);
测试:
(3)格式化日期
代码:
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
class DateFormatTest {
public static void main(String[] args) {
SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
Date date1 = new Date();
System.out.println(oldFormatter.format(date1));
// Java 8
DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate date2 = LocalDate.now();
System.out.println(date2.format(newFormatter));
}