java常量池中存放什么,8种基本类型和String,还有其他的吗?
常量池中Integer应该没有吧?下面程序的解释对吗?packagetest;importjava.util.Scanner;importptolemy.plot.*;p...
常量池中Integer应该没有吧? 下面程序的解释对吗?
package test;
import java.util.Scanner;
import ptolemy.plot.*;
public class proj2_3rd
{
public static void main(String[] args)
{
Integer a=127; //常量池本来就有127,故引用常量池
Integer b=127; //引用常量池
//String c=new String("5555"); //在常量池中创建,拷贝到堆中,c是堆中字符串的引用
String c="5555"; //在常量池创建并引用常量池
String d="5555"; //常量池直接应用
Integer e=666; //Integer不属于基本类型;所以这句相当于 Integer e=new Integer(); 下同,都是指向堆的
Integer f=666; //
Integer g=666; //
System.out.println((a==b)+" "+(c==d)+" "+(e==f)+" "+(f==g));
}
}
输出:
true true false false 展开
package test;
import java.util.Scanner;
import ptolemy.plot.*;
public class proj2_3rd
{
public static void main(String[] args)
{
Integer a=127; //常量池本来就有127,故引用常量池
Integer b=127; //引用常量池
//String c=new String("5555"); //在常量池中创建,拷贝到堆中,c是堆中字符串的引用
String c="5555"; //在常量池创建并引用常量池
String d="5555"; //常量池直接应用
Integer e=666; //Integer不属于基本类型;所以这句相当于 Integer e=new Integer(); 下同,都是指向堆的
Integer f=666; //
Integer g=666; //
System.out.println((a==b)+" "+(c==d)+" "+(e==f)+" "+(f==g));
}
}
输出:
true true false false 展开
6个回答
展开全部
常量池是介于栈和堆外的另一种独立的内存管理空间,相同内容常量池中永远只有一份,基本数据类型、对象的引用都存在栈中,执行速度快,包装类型,对象存储,new出来的对象都是存储在堆中,Byte,Short,Integer,Long,Character这5种整型的包装类只是在对应值小于等于127时才可使用对象池。超过了就会自动申请空间创建对象,所有才会出现上述情况,而String是个较为特殊的包装类型,直接用=“”创建的数据是存放在常量池,且无论数据大小都不会申请空间创建,除非使用new关键字。
展开全部
因为常量池里,只存一个字节的常量。 一个字节有8位,前面一位是正负符号,剩下7位。所以正数最大的值是2^7-1 =127。 所以超过127的都不是在常量池里的了。 int来说,-128 到127都是在常量池的。
追问
谢谢,但是String常量也可以在常量池中的吧,应该说大于一个字节的 Integer 不会被放到常量池,但是String总不可能被限制在一个字节吧。所以 “因为常量池里,只存一个字节的常量。” 表述有误吧?
追答
具体你百度一下 java 常量池,里面有详解呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是在疑问为什么最后三个不相等是吧?整型在常量池中应该是有数值限制,127在范围内,而666在范围外,所以127可以在常量池内创建,而666则是在堆内创建新对象
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
针对上例,对象本身一定在堆中,对象引用一定在栈中,对象中的数据在常量池中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内存里只有小于127的integer,大于这个数的是要新创建的
追问
嗯,谢谢。是不是当大于127的时候 Integer 对象的创建就无关常量池了?
还有只要加载过的类的对象,都会在常量池中有一份拷贝吗?(好像Integer就是反例,但String好像是正例...)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询