Java.lang
Object类
类Object是类层次结构的根,每个类都有Object作为超类
截屏2022-04-24 14.32.22.png
重写equals方法
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (obj instanceof Student) {
Student s1 = (Student) obj;
if (this.id == s1.id) {
return true;
} else {
return false;
}
}
return false;
}
重写equals方法,通常需要重写hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希代码
public class StudentTest {
public static void main(String[] args) {
Student s1 = new Student(3,"张飞");
Student s2 = new Student(3,"里斯");
Student s3 = s1;
if (s1.equals(s2)) {
System.out.println("hahahah");
}
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
}
System.out.println(s1.hashCode()); //1523554304
System.out.println(s2.hashCode()); //1175962212
因为我们重写了equals方法,但是hashCode方法并没有跟着一起修改,打印的哈希值是不一样的,我们在创建Student这个对象的时候,id值是一样的,按道理哈希值就应该是一样的,现在不一样的原因是我们没有去重写hashCode这个方法去适配equals这个方法的修改
@Override
public int hashCode() {
return Objects.hash(id);
}
在Student类中添加这个方法,那么打印的哈希值就一样的了
toString
获取调用对象的字符串形式:包名.类名@哈希值的16进制
System.out.println(s1.toString()); // com.lagou.task12.Student@22
从打印结果来看,其实很多东西是我们不需要的,如果修改优化呢,其实就是重写toString方法
public String toString() {
return "Student";
}
如果我们要比较名字呢,怎么修改
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (obj instanceof Student) {
Student s1 = (Student) obj;
if (this.name.equals(s1.name)) {
return true;
} else {
return false;
}
}
return false;
}
相应hashCode方法的修改
public int hashCode() {
return this.name.hashCode();
}
Integer类的概述
java.lang.Integer类内部包装了一个int类型的变量,主要用于实现对int类型的包装并提供int类型到String类之间的转换等方法
Integer的构造方法
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648
System.out.println("二进制的位数"+ Integer.SIZE); // 二进制的位数32
System.out.println("所占字节的个数:"+Integer.BYTES); // 所占字节的个数:4
System.out.println("对应int类型的Class实例"+ Integer.TYPE); //对应int类型的Class实例int
System.out.println("-------------------------");
Integer it1 = new Integer(123); // 已过期
System.out.println("it1 = "+ it1);
Integer it2 = new Integer("456"); // 已过期
System.out.println("it2 =" + it2);
Integer it3 = Integer.valueOf(123);
Integer it4 = Integer.valueOf("456");
System.out.println("it3 = "+ it3 + " " + "it4 = " + it4);
int ia = it3.intValue();
System.out.println("获取到的整数数据是" + ia); // ia = 123
从Java5开始增加了自动装箱和自动拆箱的机制,不再需要像上面的代码那样构造方法,可以直接到位
Integer it5 = 100;
int ib = it5;
截屏2022-04-24 17.59.36.png
截屏2022-04-24 18.06.15.png
int ic = Integer.parseInt("300"); // 300 如果转换失败,会抛出异常
System.out.println("字符串转整数:" + ic); // 字符串转整数:300
System.out.println("根据参数指定的整数获取对应的十进制字符串:" + Integer.toString(200));
System.out.println("根据参数指定的整数获取对应的二进制字符串:" + Integer.toBinaryString(200));
System.out.println("根据参数指定的整数获取对应的十六进制字符串:" + Integer.toHexString(200));
System.out.println("根据参数指定的整数获取对应的八进制字符串:" + Integer.toOctalString(200));
字符串转整数:300
根据参数指定的整数获取对应的十进制字符串:200
根据参数指定的整数获取对应的二进制字符串:11001000
根据参数指定的整数获取对应的十六进制字符串:c8
根据参数指定的整数获取对应的八进制字符串:310
Double类
截屏2022-04-24 18.13.58.png Double d1 = Double.valueOf(123.9);
System.out.println(d1.doubleValue()); // 123.9
System.out.println(Double.parseDouble("123.22")); // 123.22
System.out.println(d1.isNaN()); // false
Boolean类
截屏2022-04-24 20.53.05.png boolean ia = Boolean.parseBoolean("1");
Boolean ib = Boolean.valueOf(true);
System.out.println(ib.booleanValue()); // true
System.out.println(ib); // true
System.out.println(ia); // false
Character类
截屏2022-04-25 10.44.56.png Character c1 = Character.valueOf('a');
System.out.println(Character.isUpperCase('a')); // false
System.out.println(Character.isDigit('1')); // true
System.out.println(c1.charValue()); // a
System.out.println(Character.toUpperCase('b')); // B
System.out.println(Character.toLowerCase('A')); // a
包装类(Wrapper)的使用总结
截屏2022-04-25 10.55.26.pngMath类
截屏2022-04-25 10.59.24.png System.out.println(Math.max(10,9)); // 10
System.out.println(Math.min(1,3)); // 1
System.out.println(Math.abs(-10)); // 10
System.out.println(Math.pow(2,3)); // 2的3次方 8
System.out.println(Math.round(10.9)); // 四舍五入 11
System.out.println(Math.sqrt(10)); // 10的平方根 3.1622776601683795
BigDecimal类
BigDecimal bd1 = new BigDecimal("5.2");
BigDecimal bd2 = new BigDecimal("1.3");
System.out.println("add = " + bd1.add(bd2)); // add = 6.5
System.out.println("subtract = " + bd1.subtract(bd2)); // subtract = 3.9
System.out.println("multiply = " + bd1.multiply(bd2)); // multiply = 6.76
System.out.println("divide = " + bd1.divide(bd2)); // divide = 4
// 实现精确运算
System.out.println(0.1+0.2); // 0.30000000000000004
BigDecimal bd3 = new BigDecimal("0.1");
BigDecimal bd4 = new BigDecimal("0.2");
System.out.println(bd3.add(bd4)); // 0.3
// 注意事项
BigDecimal bd5 = new BigDecimal("2");
BigDecimal bd6 = new BigDecimal("0.3"); // 2/0.3 = 6.666666666666
//System.out.println(bd5.divide(bd6)); // 会抛出异常 Non-terminating decimal expansion; no exact representable decimal result.
System.out.println(bd5.divide(bd6, RoundingMode.HALF_UP)); // 7 四舍五入了
BigInteger类
截屏2022-04-25 11.24.52.png BigInteger t1 = new BigInteger("9999999999");
BigInteger t2 = new BigInteger("3");
BigInteger[] arr = t1.divideAndRemainder(t2);// 一次性得到商和余数
for (int i = 0;i<arr.length;i++) {
System.out.println(arr[i]);
// 3333333333
// 0
}
System.out.println(t1.add(t2)); // 10000000002
System.out.println(t1.subtract(t2)); // 9999999996
System.out.println(t1.divide(t2)); // 3333333333
System.out.println(t1.multiply(t2)); // 29999999997
网友评论