概述
比较分为值比较和引用类型比较。
值比较
即内容相同,我们就认为是相等的。比如:int i=5;int j =5;此时我们说i和j相等,其实指的是i和j的内容相同。
引用类型比较
- 两个对象的引用使用==等号比较,是指引用指向的内存地址是否相等,而不是两个对象的内容是否相等。
- Student a = new Student(); Student b = new Student();
a == b -> false这里的比较是堆中的两个对象的内存地址是否相同。 - Student a = new Student(); Student b = a;
a == b -> true 这里a,b指向同一个对象,因此它们的值指向同一块内存地址,所以是相等的;实际上a,b是两个int型的地址指针,它们也有单独内存空间,等号比较的是a,b两个指针的值,而不它们本身的地址。 - Java中引用类型变量通常无法获取本身地址,==比较的都是变量被赋予的值(其它对象的内存地址),而不是变量本身的地址,实际上也没必要获取变量本身的地址并比较,因为肯定是不同的。
- 使用equals比较
通常需要重写对象的equals方法,用来比较两个对象的内容是否相同,==比较可能不同,因为执行不同的对象,只是比较对象的内容是否相同。