`
hejiajunsh
  • 浏览: 410331 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

equals()和==的联系与区别

阅读更多

1.==的含义,如果是比较基本数据类型,那么就是比较数据类型字面值的大小。如果是比较引用数据类型,就是比较它们在内存地址上是否是相同的。

 

2.equals方法,是Object类的方法之一,所有的java类都有这个方法,区别只是自己有没有重写的问题。如果没有重写,那么也是直接比较内存地址是否相同。重写了,那就要看它们是怎么重写的。

 

看下面的例子

String str1 = "abc";
        String str2 = "abc";
        String str3=new String("abc");
        String str4=new String("abc");
        StringBuffer str5=new StringBuffer("abc");
        StringBuffer str6=new StringBuffer("abc");
        System.out.println("1:"+(str1==str2));
        System.out.println("2:"+(str1.equals(str2)));
        System.out.println("3:"+(str2==str3));
        System.out.println("4:"+(str2.equals(str3)));
        System.out.println("5:"+(str3==str4));
        System.out.println("6:"+(str3.equals(str4)));
        System.out.println("7:"+(str4.equals(str5)));
        System.out.println("8:"+(str5==str6));
        System.out.println("9:"+(str5.equals(str6)));

// 输出结果:
1:true
2:true
3:false
4:true
5:false
6:true
7:false
8:false
9:false

 

----------------------------------

说明:

String对象的初始化有两种方式。

str1和str2表示的"abc"都是存放在字符串池中,而在字符串池中,这两个"abc"其实是一个内存中的数据,

所以str1==str2是true。str1.equals(str2)是true。

 

str3和str4采用的new方式,那么它们对用的字符串"abc"都是在堆中非字符串池中,分别存放在堆中不同的地方,所以str2==str3是false。str3==str4是false。

 

而String和Stringbuffer除了都是直接继承Object之外,并没有其他的直接联系,两者完全是不相干的类。

所以才有str4==str5是false、str4.equals(str5)是false。

 

而StringBuffer也根本没有重写从父类继承的equals方法,所以str5==str6是false。str5.equals(str6)是false。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics