Java中==和equals的区别?
== :
判断基本类型时候:比较两个基本数据类型的值是否相同;比如:int 10和int 20,返回false;
判断引用类型时候:比较的是两个对象内存地址是否相同,比如:两个不同Integer 的是1000,它是返回值是false;需要注意的时:如果两个不同Integer的值是10,它返回值是true;
equals:
equals方法是Object类里面提供的一个方法,用来定义对象的内容是不是相等;(注意:equals方法不能作用于基本数据类型的变量)
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。 例如; 判断是否String相等;
首先:看内存,其次看数据类型,然后看字符串的长度是否一致,最后比较字符串里边的内容
补充:
java内部为了节省内存,IntegerCache类中有一个数组缓存了值从-128到127的Integer对象。当我们调用Integer.valueOf(int i)的时候,如果i的值时结余-128到127之间的,会直接从这个缓存中返回一个对象,否则就new一个新的Integer对象。 即:当我们定义两个Integer的范围在【-128—+127】之间,并且值相同的时候,用==比较值为true;
当大于127或者小于-128的时候即使两个数值相同,也会new一个integer,那么比较的是两个对象,用==比较的时候返回false;