Objects类
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
public static void main(String[] args) {
String a = "a";
String b = "b";
System.out.println(Objects.equals(a, b));// false
}
你在比较两个字符串是否相等的时候(我一般也就字符串的时候用下equals,别的时候都用==),可以用这个工具类,因为它不再是原本的某个需要比较的对象点上equals了(a.equals(b)
),不用担心a是个null,因为有了这个工具类,直接Objects来调用方法,所以就如上面所说,空指针安全或者叫容忍空指针的。
日期时间类Date、DateFormat、Calendar
Date
Date d = new Date();
System.out.println( d.getTime());// 1591084558639
System.out.println(System.currentTimeMillis());// 1591084558639
这个可以用它的getTime()
方法来计算一段代码或者程序执行的耗费时间,也可以System.currentTimeMillis()
,这个Date对象里的很多方法都过时了,可以使用Calendar类。
DateFormat
Date d = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df.format(d));// 2020-06-02 15:59:41
Date date = df.parse(str);
System.out.println(date);// Tue Jun 02 15:59:41 CST 2020
这个format是将日期格式的对象转化为字符串,而这个parse是用来将字符串格式的日期解析成Date对象,这个方法会抛出异常。另外大概的附一张这个格式表,注意区分一下“M”以及“m”就行了,大的表示规模大的“月”这个概念,小的表示“分”这个概念。
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
Calendar类
public static void main(String[] args) {
Calendar c =Calendar.getInstance();
Date d = c.getTime();
System.out.println(d);// Tue Jun 02 16:20:04 CST 2020
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(d));// 2020-06-02
System.out.println(c.get(Calendar.YEAR));// 2020 年份
System.out.println(c.get(Calendar.DATE));// 2 一个月的第几天
System.out.println(c.get(Calendar.DAY_OF_MONTH));// 2 一个月的第几天
System.out.println(c.get(Calendar.DAY_OF_WEEK));// 3 一周的第几天,从星期日开始计算
}
System类
public static void main(String[] args) {
int[] arr = {1,2,3};
int[] b = new int[3];
//将源数组中的数据选择性的复制到新数组中,arrayList底层的扩容也是采取这种复制的一个机制。
// 拷贝是系统级的,性能极高
System.arraycopy(arr, 0, b, 0, 3);
System.out.println(Arrays.toString(b));// [1, 2, 3]
System.out.println(System.currentTimeMillis());// 获取当前系统的毫秒值
}
StringBuilder
public static void main(String[] args) {
String s = "Hello";
s += " World";
System.out.println(s);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Hello").append(" World");
System.out.println(stringBuilder.toString());
}
由于String类的对象内容不可改变,所以每当进行一次字符串的拼接,都会产生在内存中产生一个新的对象。比如第一个拼接Hello World其实产生了三个字符串,这样既耗时又浪费空间,所以使用StringBuilder类。
StringBuilder又称为可变字符序列,是String字符串缓冲区,也是个容器(内部是个数组),容器中可以装很多的字符串,并且能够对其他的字符串进行各种操作,增删之类的。StringBuffer和他效果一样,StringBuilder是Java1.5出来的,这里就不说了,StringBuffer线程安全,StringBuilder线程不安全,但效率稍微高一点,这就是这二者的区别。
自动装箱、拆箱
Java1.5还更新了基本数据类型的自动装箱和拆箱,比如Integer a = 1;
即自动装箱(因为1默认为int类型),然后a = a + 5
这一步其实完成了两个操作,等号右边的a+5
的这个a是属于Integer类型,5为int类型,两个不同类型的值相加,a先拆箱,加完5之后再次赋值给等号左边的a,a是属于Integer类型,再次装箱。