我们希望直接打印出该对象的属性。以这种格式:类名{成员变量名=成员变量值, ...}
比较地址值和==
没有什么区别,所以我们应该重写equals
方法,让其可以比较值。
分析一波:
如果obj不是Person类型呢?对,用instanceof
进行判断
有一些特殊的值,可以直接给出结果,提高程序效率。
这个Objects是个什么鬼?我们用Ctrl
点进去看一下源码:
大致是说,这是一个关于Object类的一个静态工具集。我们再看向equals方法:
null
时,输出a.equals(b)的值a.equals(b)有一个缺点。当a为null时,会产生空指针异常。Objects的equals可以防止空指针异常。
表示特点的瞬间 ,精确到毫秒(ms, 1000ms = 1s)
System.currentTimeMillis()
返回一个Long
类型数。这个数是从1970-01-01 00:00:00(英国格林威治 标准时间)
迄今所经过的毫秒数。(中国属于东八区,要加八小时)构造方法(空参): 显示当前日期
构造方法(全参): 显示输入的毫秒值对应的时间(L类型)
转换为毫秒值:
DateFormat
是日期时间格式化的抽象类。功能是使Date和String
构造方法: DateFormat是一个抽象类,它有一个直接子类SimpleDateFormat
格式: 比如==“yyyy年MM月DD日 HH小时mm分钟ss秒”==
日历类是一个抽象类,它里面有一个很好用的静态方法getInstance()
,可以直接创建日历对象(返回一个Calendar对象),而不需要通过直接子类 。
获取指定字段的值,比如年份,月份
int field
: Calendar类对象,可以使用Calendar类静态成员变量获取(以下来自Calendar源码):
System用以获取系统相关信息或进行系统级操作
System不能被实例化,同时拥有许多可以直接使用的静态方法
常用该方法,记录程序运行时间。
final
修饰的数组,所以它不可变private final byte[] values;
StringBuilder
字符串缓存区,可以提高字符串的操作效率。(可以理解为可变字符串)
final
修饰byte[] value = new byte[16]; // 初始容量是16
可以看到,StringBuilder
自始至终就一个数组(StringBuilder容器
),占用空间少,效率高(超过16会自动扩容)
追加方法,返回本身(所以直接调用就行,不用接收返回值)
append(Object vlue)
接收任意对象作参数:
返回值是本身的,可以使用链式编程:
刚才那些代码,可以写成这样
StringBuilder
和Sting
可以相互转化
还记得ArrayList只能接收引用数据类型时,我们是怎么传递基本数据类型的?答,使用对应的包装类
包装类: 基本数据类型虽然使用方便,但是并没有对应的方法来操作这些数据。于是,可以使用一个类,把基本数据的类型装起来,在类中定义一些方法,这个类就叫包装类 。
包装类在java.lang包下,不需要导包
对 应 的 包 装 类 = 基 本 数 据 类 型 + 对 应 的 操 作 方 法 对应的包装类 = 基本数据类型 + 对应的操作方法 对应的包装类=基本数据类型+对应的操作方法
基本类型(基本类型) | 包装类(引用类型) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
floot | Floot |
double | Double |
char | Character |
boolean | Boolean |
装箱: 基本类型 --> 对应的包装类
拆箱: 包装类 --> 对应的基本类型
下面以Integer
和int
为例
装箱,可以采用构造方法或成员方法
划线,表示该方法已废弃
JDK1.5之后,基本数据类型和包装类之间,可以互相自动地拆箱和装箱。
toString
(不是Object类的,是重载后的)String
类的valueOf
静态方法