常用API-->Object、Objects,StringBuilder、Math、System、BigDecimal
- Object:
- toString方法
运行结果:
toString()打印的是对象在堆内存的地址,然而在实际的开发中,我们更多的是想看到对象的内容,因此我们需要重写父类的toString方法。
2.euqals方法:
Object的equals方法比较的是对象在堆内存的地址,如果我们只是想比较一下两个对象里边的内容一样则即为相等的对象,则需要在子类重写equals方法:
(1)自己写:
1 public boolean equals(Object obj){ 2 //类型是否一样 3 if(obj instanceof Student){ 4 //强制类型转换,才可以.对象的属性 5 Student stu = (Student) obj; 6 if(this.name.equals(stu.name) && 7 this.sex == stu.sex && 8 this.age == stu.age){ 9 return true; 10 }else { 11 return false; 12 } 13 }else { 14 return false; 15 } 16 }
优化:
1 public boolean equals(Object obj){ 2 if(obj instanceof Student){ 3 Student stu = (Student) obj; 4 return this.name.equals(stu.name) && this.sex == stu.sex && this.age == stu.age; 5 } 6 return false; 7 }
也可以右键使用官方生成的:
Objects的equals(Object a,Object b)方法:
先来看Object的equals方法:
不过这个方法有一个隐患,就是当对象str1为空时,程序会崩掉,原因:
我们知道,this指向当前对象,而当str1为null时,当前对象便不被指向,会被垃圾回收器回收,此时this便无法找到调用改方法的对象,所以程序会崩掉!当然str2时可以为null的,因此,建议使用Object的equals方法时,建议写为如:123.equals(str),而不是str.equals(123)。
再来看,我们对上述代码稍作改动,使用Objects的equals方法有什么不一样的呢?
可以看到,程序很健壮,无论那个对象为null都不会崩掉。再来看一下Objects的equals方法源码:
当对象a和b所在内存地址一样时则直接返回true,当对象a不为null时在调用equals方法,不得不说官方的思路很严谨呐,代码写的也很漂亮~
StringBuilder & String
由于String对象的不可变性,可以看到,利用“+”符号连接字符串时,每加上一个字符串对象便会重新创建一个StringBuilder对象,当进行频繁的修改、拼接等操作时会严重地浪费内存资源。
可以看到,StringBuilder类只会在堆内存中创建一个对象,进行拼接效率要远远高于String类。
案例:
- 需求:设计一个方法用于输出任意数组的内容,要求输出格式为:
- 该数组内容为:[11,22,33,44,55]
分析:设计一个方法,要求该方法能够接收数组,并输出内容
1 public class TestDemo { 2 public static void main(String[] args) { 3 int[] arr1 = null; 4 System.out.println(printArr(arr1)); 5 int[] arr2 = {11,22,33,55,66}; 6 System.out.println(printArr(arr2)); 7 int[] arr3= {}; 8 System.out.println(printArr(arr3)); 9 } 10 public static String printArr(int[] arr){ 11 if(arr == null){ 12 return null; 13 } 14 else { 15 StringBuilder sb = new StringBuilder([); //创建StringBuilder对象 16 for (int i = 0; i < arr.length; i++) { 17 sb.append(i == arr.length -1 ? arr[i] : arr[i] + ,); 18 } 19 String ret = sb.append(]).toString(); //转换成String类型 20 return ret; 21 } 22 } 23 }
运行结果:
Math类常用API:
结果:
System类的常用API:
BigDecimal:
运行结果: