在JVM中,内存分为堆内存和栈内存——
当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象存储到堆内存,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。
(1)String str1 = "Hello"会在堆区存放一个字符串对象
(2)String str2 = new String("Hello")会在堆区再次存放一个字符串对象
(3)String str3 = str2这时候Str3和Str2是两个不同的引用,但是指向同一个对象。
但需注意的一点是,基本数据类型是存储在栈内存中的。
java的8种基本数据类型:
那么equals和==的区别是什么呢?
1. ==判断的是两个变量或实例是不是指向同一个内存空间
equals()是判断两个变量所指向的内存空间的值是不是相同
2. ==是对内存地址进行比较
equals()是对字符串的内容进行比较
3. ==指引用是否相同
equals()指的是值是否相同
用一张图可以简要的表现他们之间的关系:
待续……