一、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);
}
}
}