【JavaWeb分析】详解java 中 == 和 equals 的区别
代码:
在java中我们一般把对象存放在堆区,把对象的引用放在栈区。
详解:
因此在上面三个字符串的内存状态应该是下面这样的。
现在明白了吧。
(1)String str1 = "Hello"会在堆区存放一个字符串对象
(2)String str2 = new String(“Hello”)会在堆区再次存放一个字符串对象
(3)String str3 = str2这时候Str3和Str2是两个不同的引用,但是指向同一个对象。
根据这张图再来看上面的比较:
(1)str1==
str2嘛?意思是地址指向的是同一块地方吗?很明显不一样。
(2)str1==
str3嘛?意思是地址指向的是同一块地方吗?很明显不一样。
(3)str2==
str3嘛?意思是地址指向的是同一块地方吗?很明显内容一样,所以为true。
(4)str1.equals(str2)嘛?意思是地址指向的内容一样嘛?一样。
(4)str1.equals(str3)嘛?意思是地址指向的内容一样嘛?一样。
(4)str2.equals(str3)嘛?意思是地址指向的内容一样嘛?一样。
总结:
(1)、基础类型比较
使用==
比较值是否相等。
(2)、引用类型比较
①重写了equals方法,比如String。
第一种情况:使用==比较的是String的引用是否指向了同一块内存
第二种情况:使用equals比较的是String的引用的对象内用是否相等。
②没有重写equals方法,比如User等自定义类。==
和equals
比较的都是引用是否指向了同一块内存。