Object API、equals 和 ==
写在前面:
equals默认情况下比较的是地址值,和的效果一样
当equals被重写过,就变为比较内容值
基本类型只有,都是比较地址值
String由于equals被重写过,所以变为比较内容值
java的应用类型基本都重写过equals方法,所以导致equals比较的都是内容。
字符串只要在堆里面生成,别人用的时候优先查堆里面有没有,有就直接使用,只是换了一个地址值;
String的equals()补充
- Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。
2.使用直接指定或者使用纯字符串串联来创建String对象,仅会检查String池中的字符串,池中没有就在池中创建一个,
有则不创建 , 但绝不会在堆栈区再去创建该String对象。 - 使用包含变量的表达式来创建String对象,会在堆栈区创建一个String对象。
一.java.lang.Object类:
1.特点:
(1)所有类的最顶层父类,是类层次结构的根类
(2)它里面定义的方法,子类都有
2.toString方法
(1)String toString(): 返回对象的字符串表现形式
Object类toString的默认做法:类的全名称(包名+类名) + @ + 16进制的整数
(2)Object类或子类,没有覆盖重写toString方法,返回的是地址值
(3)但是,一般情况下,子类需要覆盖重写toString方法,不再返回地址值,而是返回对象的内容
快捷键:alt+insert--->toString-->回车
3.equals方法:
(1)public boolean equals(Object Obj):指示其他某个对象是否与此对象“相等”。
Object类中的equals方法,默认使用==进行对象地址值的比较
(2)Object类或子类,没有覆盖重写equals方法,比较是地址值
(3)但是,一般情况下,子类需要覆盖重写equals方法,不再比较地址值,而是比较对象的内容
快捷键:alt+insert--->equals and hashCode -->回车
(4)==:
a.基本数据类型,比较的是数据值
b.引用数据类型,比较的是地址值
二.java.util.Objects类
1.作用:
是一个工具类,jdk7+以后,里面都是静态方法,类名直接调用
2.常用方法:
(1)static boolean equals(Object a, Object b) :比较两个对象a,b内容是否相同
避免报空指针异常
(2)static boolean deepEquals(Object a, Object b) :比较两个对象a,b是否深层次相同(数组,就比较内容)
避免报空指针异常
三.java.util.Date类
1.特点:
(1)表示特定的瞬间,精确到毫秒。1秒 = 1000毫秒
(2)时间原点:1970年1月1日 00时00分00秒00毫秒 0
(3)时间标准:采用的是格林尼治/格林威治时间
(4)北京时间和原点时刻相差8小时
2.构造方法
public Date(): 从时间原点,到当前运行程序的时刻,所经历的毫秒值对应的日期格式
public Date(long time): 将指定的毫秒值,转换成Date对象
3.常用方法
public long getTime():获取Date对象对应的毫秒值
void setTime(long time) : 将日期对象的毫秒值设置为time
四.java.text.DateFormat类
1.作用: 是一个抽象类,完成日期对象和字符串之间的来回转换
2.常用功能:
(1)格式化:日期对象转换成对象的字符串
String format(Date date):把日期对象转换成对象的字符串
(2)解析:把字符串解析成对应的日期对象
Date parse(String str): 把字符串转换成的日期对象对象
3. java.textDateFormat抽象类,我们使用子类
java.text.SimpleDateFormat类
构造方法:
SimpleDateFormat(String pattern)
参数:String pattern代表转换后字符串的显示格式
最常用的格式:
2018-08-24 10:15:20 --> yyyy-MM-dd HH:mm:ss
2018年08月24日 10点15分20秒 --> yyyy年MM月dd日 HH点mm分ss秒
五.java.util.Calendar类
1.作用:
表示日历类,里面存储了各种各样的与日期相关的信息,用什么拿什么,所以非常方便
是一个抽象类,不能直接创建对象
可以使用子类GregorianCalendar,但是不推荐使用
2.获取Calendar类的对象
Calendar抽象类中提供了一个静态方法:
static Calendar getInstance() :获取Calendar类的子类对象
3.常用方法
- public int get(int field):返回给定日历字段的值。
- public void set(int field, int value):将给定的日历字段设置为给定值。
- void set(int year, int month, int date):设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
- public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
- public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
- void setTime(Date date):把Date对象转换成Calendar对象
六.java.lang.System系统类:
1.作用:
方法都是静态的,构造方法私有,不能创建对象,只能使用类名调用方法
2.常用方法:
(1)public static long currentTimeMillis():返回以毫秒为单位的当前时间
(2) static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
参数列表的含义:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量
七.java.lang.StringBuilder类
1.作用:
代表字符串缓冲区,支持可以改变的字符串序列,底层是一个默认长度为16的数组
2.构造方法:
(1)public StringBuilder():构造一个空的StringBuilder容器
(2)public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去
3.常用方法:
(1)public StringBuilder append(…):添加任意类型数据的字符串形式,并返回当前对象自身
(2)public String toString():将当前StringBuilder对象转换为String对象。
八.包装类
1.对应关系:
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
注意:
包装类,并不是对于对应的基本类型的简单替换,而是提供了更为丰富的方法
2.装箱和拆箱:
自动装箱:基本类型转换为对应的引用类型 int-->Integer 底层原理:Integer.valueOf(200)
自动拆箱:引用类型自动转换为对应的基本类型 Integer-->int 底层原理:Integer对象.intValue()
注意:以上操作是自动完成的,不需要代码进行特殊处理
3.字符串转成对应的基本类型
每种引用类型,都提供了一个parseXXX(String s): 把字符串类型的s,解析成对应类型的数字(Character没有)
public static int parseInt(String s):将字符串参数转换为对应的int基本类型
4.基本int类型转换成字符串String
(1)+:进行字符串的拼接 最常用的
(2)Integer类中的静态方法String toString(int num):把num变成String类型
(3)String类中的静态方法String valueOf(int num):把num变成String类型