A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© linder_qzy 中级黑马   /  2015-3-4 16:30  /  1327 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

==和equals区别 是不是字符串有点特别?,总是记混

16 个回复

倒序浏览
我也有点搞混了
==有两种用法
1.用于基本数据类型(int  byte double等)时,比较的是值(内容)是否一致!!
2.用于引用类型(类class  String等)时,比较的是地址值!
equals用于String,比较的是内容是否一致

给每个新人回帖是一种美德!!毕竟咱也是新手:)

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
基本数据下: ==和equals都是比的是数值大小。
回复 使用道具 举报
基本数据下: ==和equals都是比的是数值大小;引用类型下,==和equals比较的是地址值,但是有种情况下比较特殊就是String字符串不大一样,因为String中的equals方法重写了,所以比较的是字符串内容是否相同

评分

参与人数 1黑马币 +2 收起 理由
万合天宜 + 2 赞一个!

查看全部评分

回复 使用道具 举报

==:比较的都是栈内存中的值,比如,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(),来自定义自己想比较的内容,比如



    1. class Person{
    2.         String name;
    3.         int age;
    4.         Person(){}
    5.         Person(String name,int age){
    6.                 this.name=name;
    7.                 this.age=age;
    8.         }
    9.         public boolean equals(Object obj){
    10.                
    11.                 Person p = (Person)obj;
    12.                
    13.                 return this.age==p.age;//父类equal()比较age
    14.                
    15.         }
    16. }

    17. class Student extends Person{
    18.         Student(){
    19.                
    20.         }
    21.         Student(String name,int age){
    22.                 super(name,age);
    23.         }
    24. public boolean equals(Object obj){
    25.                
    26.                 Student st = (Student)obj;
    27.                
    28.                 return this.name.equals(st.name);//父类equal()比较String类name在堆内存中的值
    29.                
    30.         }
    31. }
    32. public class EqualsTest {
    33.         public static void main(String[] args) {
    34.                 System.out.println("父类equals()比较age");
    35.                 Person p1=new Person("zhangsan",19);
    36.                 Person p2=new Person("zhangsan",18);
    37.                 Person p3=new Person("wangwu",19);
    38.                
    39.                 System.out.println(p1.equals(p2));//父类比较age,此处为false
    40.                 System.out.println(p1.equals(p3));//父类比较age,此处为true
    41.                
    42.                 System.out.println("子类equals()比较name");
    43.                 Student st1=new Student("zhangsan",19);
    44.                 Student st2=new Student("zhangsan",18);
    45.                 Student st3=new Student("wangwu",19);
    46.                
    47.                 System.out.println(st1.equals(st2));//子类比较age,此处为true
    48.                 System.out.println(st1.equals(st3));//子类比较age,此处为false
    49.                
    50.         }

    51. }
    复制代码

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

“在堆中存储的地址是否相同”和“堆中的内容是否相同”有什么区别???总感觉是一个样的阿。。
回复 使用道具 举报
笑望长空,逆转 发表于 2015-3-5 09:10
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的 ...

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

恩 恩 对滴
回复 使用道具 举报
仰天长啸 发表于 2015-3-4 19:45
基本数据下: ==和equals都是比的是数值大小。

恩 String的equals也是比较数值
回复 使用道具 举报
linder_qzy 发表于 2015-3-5 09:12
String 类型的equals比较不是比较地址,是比较值吧

对,比较的是值。
回复 使用道具 举报
无语了、怎么都各执一词的
回复 使用道具 举报
这个可以看String类中的equals源代码,==比较的是地址值, equals比较的是内容。
回复 使用道具 举报
java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

==比较的是2个对象的地址,而equals比较的是2个对象的内容。
显然,当equals为true时,==不一定为true;
回复 使用道具 举报
2L正解啊。
回复 使用道具 举报
只记得==是比较基本数据类型     equals是用来比较对象的,是比较大小还是地址之要看比较的是什么内容,比较String和基本数据类型是不同的,而且比较的内容创建在堆内存和占内存也有区别,毕老师的java基础里讲的很明白,建议去看看

评分

参与人数 1黑马币 +6 收起 理由
梦之蓝2015 + 6 神马都是浮云

查看全部评分

回复 使用道具 举报
白春秋 发表于 2015-3-6 10:52
只记得==是比较基本数据类型     equals是用来比较对象的,是比较大小还是地址之要看比较的是什么内容,比 ...

只看到==    :'(
回复 使用道具 举报
记住:当基本数据类型用==比较的是值是是否相等,引用数据类型和equals一样都是比较地址池,但是有些类重写此方法,比如string是比较的字符串内容是否相等
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马