我知道堆的 PermGen 区域中字符串池的概念。所以当我们做类似的事情时
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");
}
结果是Both point to same object
,当我尝试
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");
}
输出是Both point to different object
我对char进行了相同的尝试,结果相似。所以我的问题是我们有所有原始类型的池int
吗char
?new ()
当我们实际使用上述第二种情况创建具有相同内容的对象时,该对象是被克隆并存储在同一个池区域中还是在池之外?