开发者社区> 问答> 正文

java包装类的问题

screenshot
我知道str和str2是存放在字符串常量池中的,所以他们是相等的,但是i和i2相等能说明这两个是同一个对象吗? 我认为i和i2相等是因为 比较它们的时候自动拆箱,按照基本数据类型来比较了, 另外关于基本类型比如int,也是类似于String常量池那样存储的吗? 就是说我有两个int值如果相等的话,它们在内存中是否就是相同的呢?
这个问题是在看 think in java 第17章 深入理解容器 时想到的,书中在将填充容器时写了一个填充Integer的自定义的List,然后说这是享元,我有点想不明白,求大神们指点呀!下面是书中的代码:
screenshot

展开
收起
蛮大人123 2016-02-21 18:54:41 3290 0
2 条回答
写回答
取消 提交回答
  • 在javac编译的时候会自动装箱、解箱的。
    2019-07-17 18:46:17
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    Integer.valueOf如果值范围在-128-127范围内,会从Integercache中获取,这里初始化了-128-127范围内的整形。所以会是同一个对象。
    如果是new Integer(1)就不一样了,这个是在堆中new对象,就不是同一个对象了。
    对于int,比较是字面数值,不是对象。int值存储在栈中。如果int值相同,只是同相同的位置load过来的,但没有地址指向的概念。

    2019-07-17 18:46:17
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载