加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 我们在堆的PermGen区域中是否有所有原始类型的池?

发布时间:2020-12-15 05:00:46 所属栏目:Java 来源:网络整理
导读:我知道堆的PermGen区域中String池的概念.所以,当我们做类似的事情 String firstString = "Stack";String secondString = "Stack"; 两个引用firstString和secondString都指向池中的同一个对象.但我尝试使用int类型的变量. int firstInt = 5; int secondInt =
我知道堆的PermGen区域中String池的概念.所以,当我们做类似的事情

String firstString = "Stack";
String secondString = "Stack";

两个引用firstString和secondString都指向池中的同一个对象.但我尝试使用int类型的变量.

int firstInt = 5;
    int secondInt = 5;

    if(firstInt == secondInt) {
        System.out.println("Both point to same allocated memory");
    } else {
        System.out.println("Both point to different allocated memory");
    }

结果是两者都指向同一个对象,当我尝试时

Integer firstInteger = new Integer(2);
Integer secondInteger = new Integer(2);

    if(firstInteger == secondInteger) {
        System.out.println("Both point to same object");
    } else {
        System.out.println("Both point to different object");
    }

输出是指向不同的对象

我尝试了相同的char,结果是相似的.所以我的问题是我们有所有原始类型的池,比如int,char?当我们使用new()实际创建具有相同内容的对象时,如上面提到的第二种情况,对象是克隆并存储在同一个池区域中还是在池外?

解决方法

你的帖子中存在很多误解,甚至很难开始解释.得到一些体面的书.目前,一些可能对您有帮助的事实:

> String不是原始类型,>没有原始类型的池,因为没有对原始类型的引用(答案说它们只保留在堆栈上是完全错误的!)>如果你使用新的,你无论如何都绕过了游泳池;所以执行新的String(“ala”)将始终创建一个新的String对象;你无法改变新的语义;>如果你想使用可用的池,在对象上使用工厂方法(比如Integer.valueOf),它们 – 在某种程度上 – 池实例(集合所有可能的Integers,Floats等值是不可行的或有益的).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读