基本知识:
Java有8种基本的数据类型:
- 整型: byte(1 byte)、 short(2 byte) 、int(4 byte)、 long(8 byte)
- 浮点型: float(4 byte)、double(8 byte)
- 字符型: char(2 byte)
- 布尔型: boolean(JVM 没有明确规定所占空间,仅规定其值只能取字面值true和false)
非基本数据类型: String、Integer、Double、Date..等
对于基本数据类型的变量:
直接存储的是值,只有==方法且==是直接比较其存储的值是否相等,没有equals()方法。
对于非基本数据类型的变量:
其存储的并不是”值”本身,而是与其关联的对象在内存中的地址;
一般的,都对equals()方法进行了重写,使得equals()比较的是变量所指向的对象的值(内容)。
总结:
对于==:
- 如果是作用于基本数据类型的变量,则直接比较其存储的值是否相等
- 如果作用的是非基本数据类型的变量,则比较的是其所指向的对象的地址空间的值是否相等(即直接比较所指向对象的地址)
对于equals( ):
- 不能作用于基本数据类型的变量;
- 对于非基本数据类型的变量,一般地,如果对equals()方法进行了重写,则比较的是所指向的对象的内容;
- 对于非基本数据类型的变量,特殊地,如果没有对equals()方法进行重写,则比较的还是所指向的对象的地址。
例子:
int m=3,n=3;
String str1 = new String("hello");
String str2 = new String("hello");
String str3 = str1;
System.out.println(m==n); //true
System.out.println(str1==str2); //false
System.out.println(str1==str3); //true
System.out.println(str1.equals(str2); //true