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等值是不可行的或有益的). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |