个人理解==和equals ->之前知识回顾

==相关:

    ==对于对象来说用于比较在栈中存放的对象的指针,比较两个对象是否指向同一个堆中的数据

    ==对于基本数据类型来说,是为了比较值,但是其实还比较地址,  对于基本数据类型来说,相同的值,指向的地址也是相同的

为什么会有栈指向堆这么设计,是因为这样的jvm内存划分能够减少相同内容对象的额外开销

equals:

    如果对象所属类未重写equals,其实还是调用obj类的equals  obj的equals还是调用了==

    

    比如string重写了equals,所以他可以比较实际的值

     大部分类都重写了equals,比如int的包装类 integer ,integer的equals就是比较实际的值

    但是对于小于某值的数字,他是会缓存的,所以引用地址是一样的,可以直接用==,大于这个值后必须用equals

    static final Integer cache[] = new Integer[-(-128) + 127 + 1];(integer 缓存数组)

     字面量赋值的方式也会在编译时调用valueof

 

猜你喜欢

转载自blog.csdn.net/qq_35902833/article/details/80436915