包装类
有时需要将基本数据转化成对象。
基本数据类型 | 包装类 |
---|---|
char | Character |
int | integer |
自动装箱/拆箱
缓存问题
同样是用==判断两个Integer对象,为何结果会不一样?
因为在[-128,127]之间的数字是被缓存的(实际就是系统初始的时候,创建了一个[-128,127]之间的一个缓存数组),需要时被直接调用,所以在同一地址。而这个范围之外的数字就需要new一个缓存外的对象,地址自然就不同了
String类
字符串比较要用equals
String字符串不可变(源码里有final),StringBuilder可变
StringBuilder线程不安全,效率高(一般用他),StringBuffer线程安全,效率低
地址没变,内容改变
StringBuilder运用(增删改查
append方法的高效与String陷阱
程序极易崩溃,绝对不能出现这样的代码。
每次循环的时候都会产生一个i对象,然后再产生一个新的str8对象,循环5k次,一共1w个对象
正确姿势:
这样就不需要产生额外的对象(当然也会产生对象,只不过这些对象直接往sb字符串里添加了,更高效
Date类
所在包 import java.util.Date;
以后遇到日期处理:使用Canlendar日期类
关于Date只掌握这几个就够了
DateFormat类
时间对象 指定格式的字符串 相互转换
Dateformat是一个抽象类,一般使用它的子类SimpleDateFormat
Calendar日历类
抽象类,提供关于日期计算的相关功能。比如:年月日时分秒的展示和计算
GregorianCalendar 是其具体子类,提供世界上大多国家/地区使用的标准日历系统
package cn.sxt.dyq;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestCalendar {
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2999, 10, 9, 22, 10, 50);
int year = calendar.get(calendar.YEAR);
int month = calendar.get(calendar.MONTH);
int day = calendar.get(calendar.DATE); // 也可以使用DAY_OF_MONTH
int weekday = calendar.get(calendar.DAY_OF_WEEK); // 星期几 1-7:1:星期日
System.out.println(year);
System.out.println(month);// 0-11表示对应的月份。 0是1月,1是2月...
System.out.println(weekday);
System.out.println(day);
// 设置日期相关元素
Calendar c2 = new GregorianCalendar();
c2.set(Calendar.YEAR, 8012);
System.out.println(c2);
// 日期的计算
// 往后100天的时间
Calendar c3 = new GregorianCalendar();
c3.add(Calendar.DATE, 100);
// c3.add(Calendar.DATE, -100); 往前100天的时间
System.out.println(c3);
// 日期对象和时间对象的转化
Date d4 = c3.getTime();
Calendar c4 = new GregorianCalendar();
c4.setTime(new Date());
printCalender(c4);
}
public static void printCalender(Calendar c) {
// 打印 1918年10月10日 11:23:45 周三
int year = c.get(Calendar.YEAR) + 1;
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DAY_OF_MONTH);
int dayweek = c.get(Calendar.DAY_OF_WEEK) - 1;
String dayweek2 = dayweek == 0 ? "日" : dayweek + "";
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.println(
year + "年" + month + "月" + date + "日 " + hour + "时" + minute + "分" + second + "秒 " + "周" + dayweek);
}
}
可视化日历程序
package cn.sxt.dyq;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 可视化日历程序
*
* @author DYQ
*
*/
public class TestCalender2 {
public static void main(String[] args) throws ParseException {
String str = "2020-9-10";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(date);
System.out.println("日\t一\t二\t三\t四\t五\t六");
c.set(Calendar.DAY_OF_MONTH, 1);
for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
System.out.print("\t");
}
int days = c.getActualMaximum(Calendar.DATE);
for (int i = 1; i <= days; i++) {
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
}
}
package cn.sxt.dyq;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 可视化日历02
*
* @author DYQ
*
*/
public class TestCalendar3 {
public static void main(String[] args) throws ParseException {
System.out.println("请输入日期(格式:2020-9-10):");
java.util.Scanner scanner = new java.util.Scanner(System.in);
String str = scanner.nextLine();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(date);
int day = c.get(Calendar.DAY_OF_MONTH);
int days = c.getActualMaximum(Calendar.DATE);
System.out.println("日\t一\t二\t三\t四\t五\t六");
c.set(Calendar.DAY_OF_MONTH, 1);
for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
System.out.print("\t");
}
for (int i = 1; i <= days; i++) {
if (day == c.get(Calendar.DAY_OF_MONTH)) {
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "*\t");
} else {
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
}
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
}
}