Object默认的基本方法

总共9个方法:

getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(),  wait(), finalize()

finalize:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法


关于==和equals

==是不是一个东西,equals是不是长的一样

int i=0;
Integer j = new Integer(0);
System.out.println(i==j);           // true
System.out.println(j.equals(i));    //true

关于自动装拆箱(JDK1.5以上)

1. 基本型和Integer型进行 == 比较,Integer会自动拆箱再比较,所以Integ(0)会拆成int 0 进行比较,返回true;

2. 两个Integer类型进行“==”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。

    Integer的==比较应该与其声明方式与值范围有关。

        Integer a = new Integer(3),这样声明的两个Integer对象==比较返回的应该是false.因为堆中指向不同的地址值.

        但是Integer b = 3这样声明的,只要在-128~127的范围内时==比较返回的是true。这时因为方法区存在一个数组,存储着-128~127的数,这时b的值是直接指向方法区的地址值。

        即:如果对象是new出来的,就算符合这个区间,地址也不同,但是如果是自动封箱出来的或者是valueOf方法出来的两个Integer对象,符合这个区间,那么这两个就是一个地址相同的缓存对象。即 Integer i = 1; Integer i = Integer.valueOf(1) 智慧创建一个对象,这些对象已经缓存在IntegerCache里面了。

3. 两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true

4. 基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。

int a=257;
Integer b=257;
Integer c=257;
Integer b2=57;
Integer c2=57;
System.out.println(a==b);
//System.out.println(a.equals(b));  编译出错,基本型不能调用equals()
System.out.println(b.equals(257.0));
System.out.println(b==c);
System.out.println(b2==c2);

因此上面的代码的结果因此为 true, false, false, true


猜你喜欢

转载自blog.csdn.net/jae_wang/article/details/80209752