java中有两种数据类型:
基本数据类型:
byte(内存中占8bit)short(内存中占16bit)int(内存中占20bit)long(占64bit)float(占32bit)double(占64bit)char(占16bit)boolean(占1bit) 只有long和double占2个局部变量(Slot,一个Slot占32位)
基本数据类型都是直接存储在内存中的内存栈上,数据本身的值就是存储在栈空间里面的
比较基本类型的时候,== 比较的直接是他们两个的值
引用数据类型:
String
引用类型继承Object类,按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储
当用(==)进行比较的时候,比较的是他们在内存中的存放地址(堆内存地址)。
注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。
区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念
例子:
public static void main(String[] args) {
String a="abc";
String b="abc";
System.out.println(a==b);//true
String c = "abc";
String d = new String("abc");
System.out.println(c == d);//false
String e = new String("abc");
System.out.println(d == e);//false
String f = e;
System.out.println(f == e);//true
}
总结:
==的作用:
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同
equals 的作用:
引用类型:默认情况下,比较的是地址值,但是这样没意义,一般这个方法被重写了,实现值的比较。
注:不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同
参考博客:https://www.cnblogs.com/smyhvae/p/3929585.html