Java 9:继承2

本文探讨了Java中的Object类,说明了默认equals方法的行为,并指出所有非基本类型的对象都继承自Object。此外,还详细介绍了ArrayList,解释了它如何解决数组大小固定的问题,提供了动态扩容的功能。通过示例展示了泛型数组列表的使用,以及如何通过ensureCapacity进行容量预分配和trimToSize方法优化内存使用。
Object类

在Java中,只有基本类型(数值、字符、布尔型)不是对象,所有数组、字符串其他类型都是继承与Object类

equals方法:

用于检查一个对象是否等于另一个对象,在Object中(原始的默认实现)是查看两个对象是否具有相同的引用,如果两者具有相同的引用就一定是相等的

然而,经常要通过对象的状态(某些域)来判断相等性

Employee e=new Employee();
Employee e2=new Employee();
if(e.equals(e))	System.out.println("相等1"); //ok
if(e.equals(e2))System.out.println("相等2"); //wrong

Employee e=null;
Employee e2=new Employee();
if(e.equals(e2))	System.out.println("相等1");//运行错误,null不能调用方法,空指针

Employee e=new Employee();
Employee e2=null;
if(e.equals(e2))	System.out.println("相等1");//可以运行,不报错
为了避免null的情况,可以用Objects.equals(one,two);

 public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }


对于子类中的equals方法,可以先调用父类的equals,然后再比较自己特有的域是否相等


泛型数组列表:

数组列表不等于链表,ArrayList不属于Java核心代码,算是第三方代码,和普通的数组一样,动态插入和删除的代价比较高

Java 允许运行时再确定数组的大小,但同样的,一旦确定了数组的大小,就不容易改变。

ArrayList可以解决这个问题。是一个·采用类型参数的泛型类

ArrayList<Double>a=new ArrayList<>();

ArrayList<Double>a=new ArrayList();不加尖括号也是可以的,是老版的方法,保存的是Object

如果add时,内部数组已经满了,ArrayList会自动创建更大的数组,并将所有的对象拷贝过去。

ensureCapacity(int)用来提前分配内部数组的大小,避免浪费,但是不影响正常使用,到了不够用的时候还是会创建更大的数组

new ArrayList<>(10)这样给定初始容量(初始化以后capacity为10,但实际的size是0)

一旦确定了数组列表的大小不再变化·,可以调用trimToSize方法,将存储区域的大小调整为当前元素所需要的存储空间,垃圾回收器将回收多余的存储空间



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值