toString方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
getClass().getName():获取包名和类名
@:原样输出
hashCode():获取系统给的随机十进制数字
Integer.toHexString():十进制转十六进制
对于类的实例对象,直接使用 对象名.toString 方法打印出的值并非是系统提供的toString方法。
Deciphering variable information while debugging Java
这个数字是ObjectID,隶属于JDWP(Java Debug Wire Protocol, Java调试线协议)。
JDWP被用来在`debugger`和他所调试的目标JVM之间通信。
JDWP是可选实现的,也就是说一些JDK的实现版本没有JDWP。
ObjectID 最多8字节,具体由VM指定。ObjectID可以唯一标识目标VM中的对象。 一个特定对象将通过JDWP命令中的一个objectID来标识,整个生命周期中不变,除非已经明确处理完了一个ObjectID,否则不会重复使用ObjectID来标识不同的对象,无论引用的对象是否已被垃圾回收。
objectID为0表示`null`对象。
**注意,对象ID的存在不会阻止对象的垃圾回收。** 任何使用其对象ID访问垃圾收集对象的尝试都将导致INVALID_OBJECT错误代码。 可以使用DisableCollection命令禁用垃圾收集,但通常不需要这样做。
转自: https://blog.csdn.net/baichoufei90/article/details/84102509
equals方法
基本数据类型比较的是值
引用数据类型比较的是地址
类的equals方法的重写:
public boolean equals(obiect o)
1.判断比较的对象是否是自己 if(this == o)
2.判断对象是否为NULL if(o==null)
3.判断比较的对象的类型是否与自己类型相同 if(getClass() != o.getClass())
or
if(o instanceof ?) 避免对象不是同一类型的情况
4.将对象向下转型
5.将类的成员变量分别做对比,可使用Objects包下的equals方法
idea自动生成的equals代码:
import java.util.Objects;
public class Preson {
Integer a;
String b;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Preson)) return false;
Preson preson = (Preson) o;
return Objects.equals(a, preson.a) &&
Objects.equals(b, preson.b);
}
@Override
public int hashCode() {
return Objects.hash(a, b);
}
}
Objects.equals源代码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
Date类
构造方法
1.无参构造 获取当前时间 例: Fri Aug 24 12:0:0 CST 2020
2.带参构造
2.1 Date(long edata)毫秒值,起点(时间原点):1970.1.1 8:0:0,(英国为0时,与东八区时间差8小时)显示值为相对于前者时间的偏移值,偏移值为long data
成员方法
getTime() 获取到当前时间的毫秒数
date格式化
java.text.DateFormat它是日期/时间格式化子类的抽象类
1.格式化时间 日期 --> 文本
2.解析 文本 --> 日期
方法:
String format(Date date):根据指定的模式,把Date日期,格式化为文本
Date parse(String source):把符合的字符串转换为Date日期
DateFormat是抽象类,无法创建实例,需要用其子类SimpleDateFormat
使用构造方法:SimpleDateFormat(String pattern),pattern格式可查看api文档
格式化方法:
1.创建实例化对象,指定格式
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
2.将日期按照约定的格式转换为文本
sdf.format(Date date);
3.将指定类型的文本转化为时间
sdf.parse(String s);
Calendar类
作用:
1.获取日历字段
2.修改日历字段
3.对日历计算进行加减
使用方法
该方法是抽象类,无法直接创建对象,但它提供了getInstance方法,返回其子类对象。
成员方法
get(int field) 返回给定日历字段的值 例如:输入1,获取年份,输入2,获取月份
set(int field,int value) 设置给定日历字段的值
add(int field,int amount) 根据日历规则,修改日历的值
getTime() 返回一个clendar时间值的date对象
System类
系统相关的方法,工具类,全是静态方法
1.currentTimeMillis()
作用:返回当前的毫秒值,可以做时间和日期的计算
2.arraycopy(Object src,int srcPos,Obiect dest,int destPos,int length)
src:源数组
srcPos:源数组起始位置
dest:目的数组
destPos:目的数组起始位置
length:复制的数量
作用:复制数组
StringBuffer类
由于String的底层代码为final,一旦创建即不可修改,对字符串相加,在系统中会出现很多字符串,会浪费大量内存。
StringBuffer类的底层代码没有被final修饰,所以至可修改,实际上相当于对一个可自动变长数组的操作。
构造方法
1.StringBuffer() 空参构造
只是简单的申请一个数组,无内容
2.StringBuffer(Obiect) 创建一个字符串
数组中存储的为该字符串
成员方法
1.int length()
返回字符的个数
2.int capacity()
返回StringBuffer的容量
3.append(Obiect)
追加字符串:
StringBuffer b1;
StringBuffer b2 =b1.append("aaa");
此处b2=b1,因为append返回的为this。
4. toString()
StringBuffer转String。
---tring转StringBuffer,直接使用StringBuffer的构造方法---
5.reverse()
将内容反转 abc-->cba
包装类
将基础数据类型装起来,为基础数据类型提供方法。
基础数据类型 | 包装数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
- 装箱
将基础数据类型转换为包装数据类型
方法:
1.使用构造方法(已过时)
2.使用valueof();
两者都有String类型的方法选项,可使用字符串和本包装类型的基础数据类型作为参数。
- 拆箱
将包装数据类型的值取出
int intValue(); 返回int值,别的类操作相似。
- 自动装箱
Integer i=10;
- 自动拆箱
Integer i=Integer.valueof(10);
i是包装类,无法直接进行计算,自动拆箱可是它进行计算
i=i+10;
基础数据类型与字符串的相互转换
- String ->包装类
- 包装类的构造方法(很少用)
- 包装类中的parseXXX(“xxx”)方法
- 包装类 ->String
- 基础数据类型+ “”
- 包装类中的toString
- String类中的valueOf()