黑马程序员技术交流社区

标题: ==和equals区别 [打印本页]

作者: linder_qzy    时间: 2015-3-4 16:30
标题: ==和equals区别
==和equals区别 是不是字符串有点特别?,总是记混

作者: 执念    时间: 2015-3-4 16:46
我也有点搞混了
==有两种用法
1.用于基本数据类型(int  byte double等)时,比较的是值(内容)是否一致!!
2.用于引用类型(类class  String等)时,比较的是地址值!
equals用于String,比较的是内容是否一致

给每个新人回帖是一种美德!!毕竟咱也是新手:)
作者: 仰天长啸    时间: 2015-3-4 19:45
基本数据下: ==和equals都是比的是数值大小。
作者: 仰天长啸    时间: 2015-3-4 19:50
基本数据下: ==和equals都是比的是数值大小;引用类型下,==和equals比较的是地址值,但是有种情况下比较特殊就是String字符串不大一样,因为String中的equals方法重写了,所以比较的是字符串内容是否相同
作者: z47057554    时间: 2015-3-5 08:56

==:比较的都是栈内存中的值,比如,int a=4,b=5; 那么a==b比较的就是4==5
       而对于引用数据类型,比如,字符串Strng str1="abc", str2=="bcd"; str1中是栈内存中的变量,它不是直接存储的"abc",它存的是地址值"abc"在堆内存的地址值,比方说这个地址值是0x123,str2同理,比方说它的地址值是0x124,那么str1==str2,比较的就是0x123==0x124,而不比较的"abc"跟"bcd"里面的字符
equals():是类中的方法,比如上例中str1.equals(str2),这里比较的是堆内存中想对应的"abc"跟"bcd";这是java定义好的,你只要知道它比较什么,拿来用就好了。但对于自定义的类,你可以通过覆盖它从父类继承的equals(),来自定义自己想比较的内容,比如



作者: 笑望长空,逆转    时间: 2015-3-5 09:10
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

“在堆中存储的地址是否相同”和“堆中的内容是否相同”有什么区别???总感觉是一个样的阿。。

作者: linder_qzy    时间: 2015-3-5 09:12
笑望长空,逆转 发表于 2015-3-5 09:10
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的 ...

String 类型的equals比较不是比较地址,是比较值吧
作者: linder_qzy    时间: 2015-3-5 09:14
执念 发表于 2015-3-4 16:46
我也有点搞混了
==有两种用法
1.用于基本数据类型(int  byte double等)时,比较的是值(内容)是否一致! ...

恩 恩 对滴
作者: linder_qzy    时间: 2015-3-5 09:15
仰天长啸 发表于 2015-3-4 19:45
基本数据下: ==和equals都是比的是数值大小。

恩 String的equals也是比较数值
作者: 笑望长空,逆转    时间: 2015-3-5 09:15
linder_qzy 发表于 2015-3-5 09:12
String 类型的equals比较不是比较地址,是比较值吧

对,比较的是值。
作者: 执念    时间: 2015-3-5 13:40
无语了、怎么都各执一词的

作者: ㏒假™面具    时间: 2015-3-5 14:47
这个可以看String类中的equals源代码,==比较的是地址值, equals比较的是内容。
作者: yangruijing    时间: 2015-3-5 18:03
java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

==比较的是2个对象的地址,而equals比较的是2个对象的内容。
显然,当equals为true时,==不一定为true;
作者: ZZGFF    时间: 2015-3-5 22:38
2L正解啊。
作者: 白春秋    时间: 2015-3-6 10:52
只记得==是比较基本数据类型     equals是用来比较对象的,是比较大小还是地址之要看比较的是什么内容,比较String和基本数据类型是不同的,而且比较的内容创建在堆内存和占内存也有区别,毕老师的java基础里讲的很明白,建议去看看
作者: 梦之蓝2015    时间: 2015-3-9 09:58
白春秋 发表于 2015-3-6 10:52
只记得==是比较基本数据类型     equals是用来比较对象的,是比较大小还是地址之要看比较的是什么内容,比 ...

只看到==    :'(
作者: android-liu    时间: 2015-3-9 11:27
记住:当基本数据类型用==比较的是值是是否相等,引用数据类型和equals一样都是比较地址池,但是有些类重写此方法,比如string是比较的字符串内容是否相等




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2