常用API
# 常用API
# 1. Object
toString方法
// 直接输出对象变量,默认可以省略toString调用不写的 System.out.println(s); // 和下面这句话同义 System.out.println(s.toString());
1
2
3
4toString 存在的意义
父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
快捷方式:
输入
tos
, IDEA 会自动提示 Generate 自动生成返回内容的信息。equals方法
直接比较两个对象的地址是否相同完全可以用“==”替代equals。
System.out.println(s1.equals(s2)); // 此时s1若==null,会报错空指针异常。
1
2equals 存在的意义
父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。
# 2. Objects
equals 方法
比 Object API 中的 equals 方法更安全,不会有空指针异常。
System.out.println(Objects.equals(s1, s2));
1但此时还是得重写 Object 中的 equals 方法,因为此时 Objects 源码中调用的 equals 方法还是重写的那个方法。
对象进行内容比较的时候建议使用什么?为什么?
建议使用 Objects 提供的 equals 方法。比较的结果是一样的,但是更安全。
isNull 方法
System.out.println(Objects.isNull(s1)); System.out.println(s1 == null);
1
2这俩写法完全一样,但是调用 API 更专业。
# 3. StringBuilder
StringBuilder 是个可变的字符串类,可以把它看成一个对象容器。
作用:提高字符串的操作效率,如拼接、修改等。
常用方法:
append(任意类型)
// 支持链式编程 sb1.append("a").append("b").append("c").append("我爱你中国"); // 反转+append也可以 sb1.reverse().append("110");
1
2
3
4以上操作都可行是因为append和reverse都是返回 this 这个当前的对象。
reverse()
length()
toString()
可用来把 StringBuild 恢复成 String 类型。StringBuild 已重写了 toString 方法。
// 例1 String rs = sb2.toString(); check(rs); public static void check(String data) { System.out.println(data); }
1
2
3
4
5
6// 例2 /** 1、定义方法接收任意整型数组,返回数组内容格式 */ public static String toString(int[] arr){ if(arr != null){ // 2、开始拼接内容。 StringBuilder sb = new StringBuilder("["); for (int i = 0; i < arr.length; i++) { sb.append(arr[i] ).append(i == arr.length - 1 ? "" : ", "); } sb.append("]"); return sb.toString(); // 转成String类型返回去 }else { return null; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
StringBuilder 和 String
StringBuilder只是拼接字符串的手段:效率好,最终的目的还是要恢复成String类型。
并且 String 类型和 StringBuild 不同,String 类型的参数不能直接传 StringBuild 对象。String 是不可变字符串,而 StringBuilder 是个可变的字符串类。
为什么拼接、反转字符串建议使用StringBuilder?
String :内容是不可变的、拼接字符串性能差。 StringBuilder:内容是可变的、拼接字符串性能好、代码优雅。
定义字符串使用String 拼接、修改等操作字符串使用StringBuilder
StringBuilder 高效的原因,如下原理图:
# 4. Math
是个工具类,没有公开构造器。其中的方法都是静态的,直接用类名调用即可,不需要创建对象,即不能实例化。
# 5. System
是个工具类,不能实例化。直接用类名调用。
# 6. BigDecimal
用于解决浮点型运算精度失真的问题。
实际开发中并不创建 BigDecimal 对象,而是调用方法来使其成为 BigDecimal 对象。如:public static BigDecimal valueOf(double val)
: 包装浮点数成为BigDecimal对象。或者传进来字符串类型的值。直接用构造器可能还是会损失精度。
double 和 BigDecimal
double 是目的,BigDecimal 是手段。
double rs = c1.doubleValue();
BigDecimal 是一定要精度运算的,除不尽的会崩,因此需要指定的小数位数。