首先顺带一个知识-缓存池与对象的创建
所以会出现如下结果:(Integer类似)
String s3 = new String("hello");
String s4 = new String("hello");
String s5 = new String(s1);
String s6 = new String(s2);
String s7 = s1;
String s8 = s2;
System.out.println(s1 == s2); //true
System.out.println(s3 == s4); //false
System.out.println(s5 == s6); //false
System.out.println(s7 == s8); //true
基础类型在创建的时候是先去缓存池中查找是否有该基础类型的相同值,如果有直接指向该缓存池内的值。没有则创建。而对象new的时候都会在内存中创建一个对象的引用。
==
比较对象的引用是否相同
equals
Obejct的方法,所以所有方法都有这个功能,它的默认功能是比较他们引用的对象是否相同。
但是各个实现类都对它进行了重写,基本都是在判断他们内容是否一致。
顺序:类型是否相同,如果相同再判断它们的值是不是相同。
compareTo
compareTo比较的必须是两个类型相同的对象,不同的话编译是不通过的。