一、Object类
1)所有数组类型,不管是对象数组还是基本类型的数组都扩展于Object类

public class A {
    public static void main(String[] args) {
        int[] t = {1,2,3};
        //两种定义方式
        Object ob = t;
        Object ob2 = new int[10];
    }
}

2)Object类中三种方法比较对象相同或者是否属于同一个类
若有a对象和b对象
方法一:getClass()

public class A {
    public static void main(String[] args) {
        A a = new A();
        A b = new A();
     if(a.getClass()==b.getClass()){
            System.out.println("a对象和b对象相同");
        }
    }
}

方法二:equals()

public class A {
    public static void main(String[] args) {
        A a = new A();
        A b = new A();
        // 输出结果a 与 b不相同
     if(a.equals(b)){
            System.out.println("a对象和b对象相同");
        }else{
            System.out.println("a对象和b对象不相同");
        }
    }
}
public class A {
    private String name;
    //A的构造方法
    A(String name){
        this.name = name;
        }
    public static void main(String[] args) {
        A a = new A("张三");
        A b = new A("李四");
        //输出结果 a与b不相同
        if(a.equals(b)){
            System.out.println("a和b对象相同");
        }else {
            System.out.println("a和b对象不同");
        }
    }
}

比较两个对象是否相等,如果两个对象指向同一个储存区域,则返回ture ,否则返回false

方法三、instanceof

public class A {
    public static void main(String[] args) {
        A a = new A();
        A b = new A();
        boolean bool = a instanceof A;
    }
}

——————————————————————问题:这方法一和方法二的区别?

3)使用==比较8种基本类型域,使用equals比较对象域

4)如果在子类中重新定义equals,就要在其中包含调用super.equals(other)(????感觉有问题)

5)对于数组类型的域,可以使用Arrays.equals(Type[],Type[])

public class A {
    public static void main(String[] args) {
        String[] t = {"2","3"};
        String[] t1 = {"2","3"};
        //返回布尔值
        boolean b = Arrays.equals(t,t1);
    }
}

二、hashCode方法
由于hashCode方法定义在Object类中,由此每一个想都有一个默认的单列码,其值为对象的储存的地址

值的注意的是字符串的散列码对应的是由内容导出的,而字符串缓冲(StringBuffer & StringBulider)由于没有定义hashCode的方法,所有它的散列码导出的是对象储存地址

public class A {
    public static void main(String[] args) {
        //同StringBuffer
        StringBuilder sb = new StringBuilder("1");
        String s = "1";
        int t  = sb.hashCode();
        int t1 = s.hashCode();
        //输出结果不为0,证明两个散列码不同
        System.out.println(t-t1);
    }
}

还有就是Equals与hashCode的定义必须一致,两个相等的对象要求返回相等的散列码

1)计算数组的散列码(静态方法)
Arrays.hashCode(Type[] t );

2)返回对象的字符串
toString()方法,返回String 变量

public class A {
    public static void main(String[] args) {
         A a = new A();
         String s = a.toString();
         System.out.println(s);
    }
}

三、泛型数组列表的常用方法

public class A {
    public static void main(String[] args) {
        A a = new A();
        A b = new A();
        A c = new A();
         //构造一个A类的数组列表
        ArrayList<A> arr = new ArrayList<>();
        //如果已经清楚或者能够估算出数组可能储存,就可以在添加数组之前调用ensureCapacity()方法
        arr.ensureCapacity(3);
        //使用add方法将A类对象元素添加到数组中
        arr.add(a);
        //在指定索引添加元素
        arr.add(1, b);
        //返回数组列表包含的实际元素, 此时t = 2 
        int t = arr.size();
        /*
         * 一旦能够确认列表不在发生大小,就可以调用trimToSize方法,这个方法将储存区域调整
         * 为当前元素数量所需要的储存空间数目,垃圾回收器将回收多余的储存空间
         */
        arr.trimToSize();
        //set方法可以设置或者改变数组中已经添加的元素 ,位置从0开始
        arr.set(0, c);
        //get方法获取数组列表中的元素,但是get方法返回的是Object类,因此必须强制转换
        A e = (A)arr.get(1);
        //删除元素
        arr.remove(0);
        //输出arr数组
        for(A s:arr){
            System.out.println(s);
        }

    }

}