==相关:
==对于对象来说用于比较在栈中存放的对象的指针,比较两个对象是否指向同一个堆中的数据
==对于基本数据类型来说,是为了比较值,但是其实还比较地址, 对于基本数据类型来说,相同的值,指向的地址也是相同的
为什么会有栈指向堆这么设计,是因为这样的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