我知道str和str2是存放在字符串常量池中的,所以他们是相等的,但是i和i2相等能说明这两个是同一个对象吗? 我认为i和i2相等是因为 比较它们的时候自动拆箱,按照基本数据类型来比较了, 另外关于基本类型比如int,也是类似于String常量池那样存储的吗? 就是说我有两个int值如果相等的话,它们在内存中是否就是相同的呢?
这个问题是在看 think in java 第17章 深入理解容器 时想到的,书中在将填充容器时写了一个填充Integer的自定义的List,然后说这是享元,我有点想不明白,求大神们指点呀!下面是书中的代码:
Integer.valueOf如果值范围在-128-127范围内,会从Integercache中获取,这里初始化了-128-127范围内的整形。所以会是同一个对象。
如果是new Integer(1)就不一样了,这个是在堆中new对象,就不是同一个对象了。
对于int,比较是字面数值,不是对象。int值存储在栈中。如果int值相同,只是同相同的位置load过来的,但没有地址指向的概念。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。