一.(==)
1.基本数据类型:比较的是值是否相等,因为基本数据类型的值都存在栈内存,并且多个变量的值相同会共享一个栈值(可以理解为比较值的内存位置是否相等)
2.引用数据类型:比较的是栈中指向堆中对象的内存地址是否相等
二.(equals)
1.所有equals都继承Object的equals的方法,equals底层还是使用的==比较,
Object的equals方法:
public boolean equals(Object paramObject) {
return (this == paramObject);
}
2.
A.除了String,其他基本数据类型都不能调用方法,包括equals方法。
B.String是一个特殊的基本数据类型,可以调用String类的熟悉和方法,包括equals方法,String的equals方法重写了Object的equals方法,不在是==的比较,而是值的比较。
C.基本数据类型的包装类,除了String,使用的equals还是使用的底层==的比较,比较的是值是否相等(不使用new声明的包装类的值的存储和基本数据类型方式一样),如:
Integer a = 3
需要注意Integer a = 128的时候,存储方式使用引用类型的方式存储,此时equals比较的就是内存地址了:
1.Integer类型
Integer i1 = 3;
Integer i2 = 3;
此时i1 == i2 返回的是true
Integer i1 = 128;
Integer i2 = 128;
此时i1 == i2返回的是false,
这时因为Integer的数值在-128~127之间时,即在int的范围内,默认是按照基本类型int来存放的,仍旧存在堆栈中,如果超出了int的范围,就按照对象的方式来存放和比较了。
D其他引用类型,只有没重写equals方法,使用equals还是使用的底层的==,比较的是内存地址。