1、Java字符串拼接的方式:
(1)用 + 符号:
原理:其实是调用StringBuilder来实现的,”a” + “b”等效于下面的代码片:
String a = "a";
StringBuilder sb = new StringBuilder();
sb.append(a).append("b");
String str = sb.toString();
用“+”号每拼接一次都会新建一个StringBuilder对象,并且最后toString()方法还会生成一个String对象,在循环拼接十万次的时候,
就会生成十万个StringBuilder对象,十万个String对象。
(2)使用String的方法concat:
public String concat(String str) {
int otherLen = str.length(); if (otherLen == 0) { return this;
} int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen); str.getChars(buf, len); return new String(buf, true); }
(3)使用StringBuilder的append/StringBuffer的append
2、Java日期相关
/**
* 获得指定日期的前一天
* @param specifiedDay
* @return
* @throws Exception
*/
public static String getSpecifiedDayBefore(String specifiedDay){
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date date=null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day=c.get(Calendar.DATE);
c.set(Calendar.DATE,day-1);
String dayBefore=new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayBefore;
}
/**
* 获得指定日期的后一天
* @param specifiedDay
* @return
*/
public static String getSpecifiedDayAfter(String specifiedDay){
Calendar c = Calendar.getInstance();
Date date=null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day=c.get(Calendar.DATE);
c.set(Calendar.DATE,day+1);
String dayAfter=new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayAfter;
}
这两个类实现append的方法都是调用父类AbstractStringBuilder的append方法,
只不过StringBuffer是的append方法加了sychronized关键字,因此是线程安全的
(4)使用使用StringBuffer的append
1、循环拼接字符串
StringBulider > StringBuffer >> String.concat > “+”。
在只拼接少量字符串的情况下的时候,他们效率的按快慢排序是
String.concat > StringBulider > StringBuffer > “+”。
从以上分析我们可以得出以下几点结论
1.无论如何直接用“+”号连接字符串都是最慢的
2.在拼接少数字符串(不超过4个)的时候,concat效率是最高的
3.多个字符串拼接的时候,StringBuilder/StringBuffer的效率是碾压的
4.在不需要考虑线程安全问题的时候,使用StringBuilder的效率比StringBuffer更高
2、jvm调优
3、Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
// int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR);
int min = calendar.get(Calendar.MINUTE);
int sec = calendar.get(Calendar.SECOND);
int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
// System.out.println(year);
// System.out.println(month);
// System.out.println(day);
// System.out.println(hour);
// System.out.println(min);
// System.out.println(sec);
// System.out.println(week);
// 获取某个月份的最后一天
int currMonth = 2;
calendar.set(calendar.get(Calendar.YEAR), currMonth, 1);
calendar.add(Calendar.DATE, -1);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);