分享

==和equals

 最初九月雪 2013-05-14
==
            ==操作符是专门用来比较两个变量的值是否相等。也就是比较两个变量所对应内存中的地址是否相等。比较两个基本类型变量是否相等只能用==。
           如果一个变量指向的类型是对象类型时,这就涉及到两块内存。
               例如:
                        object obj  = new object();
               这里面obj是一块内存,new object()又是一块内存,而obj内存中的值就是new object()所在内存的起始地址。对于对象类型,如果判断两个变量是否指向同一对象时(就是比较内存是否相同)就用==。
equals
         equals是比较两个对象的内容是否相等,但是这是两个独立的对象不是一个对象。
                         String str1 = new String(" ");
         String str2 = new String(" ");
         str1.equals(str2)的值为true,但是str1 == str2的值为false。str1和str2的内容是相等的,但是内存所在的位置是不同的。
         实际应用时,一般String类型都是采用equals方法。
        如果自己没有重写equals方法,他就自动调用单根类object类的equals方法,我们可以看到这和用==没有区别,像机械基本类型就是这样定义如下:
                       boolean equals(object o){
return this == o;
}

新的感觉:
  '==’考察的是内存,equals是内容。
int i = 3;
int j = 3;
System.out.println(i == j);
结果是true

string i = “abc”;
string j = “abc";
Systrm.out.println(i == j);
结果是true

string i = new string("abc");
string j = new string("abc");
Systrm.out.println(i == j);
结果是false

这个涉及到Java内存的管理问题,就是栈和堆。这里面涉及到栈的共享机制,比如第一个中的int i=3;它会首先在栈中寻找'3'这个内容,如果有的话就直接指向他,没有就开辟内存并将内容放入3.(时间不够,再写吧)




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多