Nodin的专栏

多思不若养志,多言不若守静,多才不若蓄德

java中==与equals的区别

      在实际编程中,经常会使用到==和equals来判断两个变量是否相同。但也有不少人,尤其是java初学者常常会把它们记得乱七八糟,使用起来更是一团糟。以下是我做的一些总结,希望对大家有所帮助,如有错误请大家不吝指出,谢谢!^_^

      说明:测试环境:jdk1.6.0

      一、==介绍

      ==运算符比较的是两个变量的值是否相等,以  a==b为例:

            (1)如果a,b都是基本数据类型

                    1、如果a、b不兼容,则不可比较

                    2、如果a、b兼容,则那么比较的是两个变量在栈内的数值:

                                int a=1;int b=1;

                          结果:a==b:true;

图片

            (2)如果a为基本数据类型,b为引用数据类型

                    1、如果a、b不兼容,则不可比较

                    2、如果a、b兼容,则比较的依然是a、b具体的值:

                                int a=1;

                                Integer b=1;

                                Integer B=new Integer(1);

                          结果:a==b:true;a==B:true

 

            (3)如果a、b都是引用数据类型

                    1、如果a、b不兼容,则不可比较

                    2、如果a、b兼容,则比较的是对象a、b在栈上的地址,而非该地址指向的堆上的具体数值

                         简单说,就是比较对象a、b是否是同一对象

                                String a = "abc";

                                String b = new String("abc");

                                String B = new String("abc");

                          结果:a==b:false;

                                   a==B:false;

                                   b==B:false

      二、equals介绍

      一般情况下,equals比较的是两个对象的内容是否相等,以  a==b为例:

            (1)如果a,b都是基本数据类型,不可用

 

            (2)如果a为基本数据类型,b为引用数据类型

                    1、如果a、b不兼容,则结果必然为false

                    2、如果a、b兼容,则比较的是a在栈上的数值与b在堆上具体的内容:

                                int a=1;

                                Integer b=1;

                                Integer B=new Integer(1);

                          结果:b.equals(a):true;

                                   B.equals(a):true

 

            (3)如果a、b都是引用数据类型

                    1、如果a、b不是同一个类的实例,则结果必然为false

                                如:Object a=new String("abc");Object b=new StringBuffer("abc");

                    2、如果a、b是同一个类的实例,则比较的是对象a、b在堆上的具体内容

                                      String a=new String("abc");

                                      String b=new String("abc");

                                      String c=new String("def");

                                      Object B=new String("abc");

                          结果: a.equals(b):true

                                    a.equals(c):false

                                    a.equals(B):true

                                    c.equals(B):false

                 

                

 

阅读更多
个人分类: J2SE
想对作者说点什么? 我来说一句

javaequals和==的区别.doc

2011年06月02日 42KB 下载

Java中的==和equals区别

2013年01月30日 15KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭