API (Application Programming Interface):应用程序编程接口
简单来说:就是 Java 帮我们已经写好的一些类和方法,我们直接拿过来用就可以了
所有的类,都直接或者间接地继承了 Object 类 (祖宗类)
Object类的方法是一切子类都可以直接使用的
public String toString();
默认是返回当前对象在堆内存中的地址信息:类的全类名@十六进制哈希值
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashcode());
}
getClass().getName():获取类的全类名,即“包名+类名”
Integer.toHexString():转十六进制
hashcode():返回对象的内存地址用哈希算法算出来的哈希值
使用打印语句打印对象名的时候,println() 会自动调用对象的 toString 方法
开发中直接输出对象,默认输出对象的地址其实是毫无意义的
开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息
父类 toString() 方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息
public boolean equals(Object obj);
默认是比较当前对象与另一个对象的地址是否相同
public boolean equals(Object obj) {
return (this == obj);
}
父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则
重写equals方法一般用IDEA直接生成
Objects类与 Object 还是继承关系,Objects类是从JDK 1.7开始之后才有的
1、equals 方法
public static boolean equals(Object a, Object b);
比较两个对象,底层会先进行非空判断,从而可以避免空指针异常,再进行equals比较
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
2、isNull 方法
public static boolean isNull(Object obj);
判断对象是否为 null
是一个工具类,包含执行基本数字运算的方法
public static int abs(int a) |
获取参数绝对值 |
public static double ceil(double a) |
向上取整 |
public static double floor(double a) |
向下取整 |
public static int round(float a) |
四舍五入 |
public static int max(int a,int b) |
获取两个int值中的较大值 |
public static double pow(double a,double b) |
返回a的b次幂的值 |
public static double random() |
返回值为double的随机值,范围[0.0, 1.0) |
是一个工具类
public static void exit(int status) |
终止当前运行的 Java 虚拟机,非零表示异常终止 |
public static long currentTimeMillis() |
返回当前系统的时间毫秒值形式 |
public static void arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数) |
数组拷贝 |
用于解决小数运算中, 出现的不精确问题
// 创建对象
// 法一:不推荐,仍存在不精确的问题
public BigDecimal(double val)
// 法二:
public BigDecimal(String val)
// 法三:
public static BigDecimal valueOf(double val)
// 示例:
BigDecimal bd1 = BigDecimal.valueOf(1.0);
BigDecimal bd2 = BigDecimal.valueOf(0.3);
// System.out.println(bd1.divide(bd2)); // 报错
System.out.println(bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP)); // 3.33
// doubleValue() 将 BigDecimal 转为 double
double a = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
public BigDecimal add(BigDecimal b) |
加法 |
public BigDecimal subtract(BigDecimal b) |
减法 |
public BigDecimal multiply(BigDecimal b) |
乘法 |
public BigDecimal divide(BigDecimal b) |
除法 |
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) |
除法 |
BigDecimal divide = bd1.divide(参与运算的对象, 小数点后精确到多少位, 舍入模式);
参数1 ,表示参与运算的BigDecimal 对象。
参数2 ,表示小数点后面精确到多少位
参数3 ,舍入模式
RoundingMode.UP 进一
RoundingMode.DOWN 去尾
RoundingMode.HALF_UP 四舍五入
将基本数据类型,包装成类 (变成引用数据类型)
变成类,就可以创建对象了
对象就可以调用方法更方便地解决问题
int num = 1;
// 手动拆装箱
Integer i1 = Integer.valueOf(num);
int n1 = i1.intValue();
// JDK5 开始可以自动拆装箱
Integer i2 = num;
int n2 = i2;
// valueOf()源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
public static String toBinaryString(int i) |
得到二进制 |
public static String toOctalString(int i) |
得到八进制 |
public static String toHexString(int i) |
得到十六进制 |
public static int parseInt(String s) |
将字符串类型的整数转成int类型的整数 |
注意:
自动装箱的原理:系统自动调用了 valueOf() 方法
如果装箱的数据不在 [-128, 127] 范围,会创建一个新的对象
如果在此范围,会从 Integer 类的 cache 数组中取出一个提前创建好的对象并返回