java常量池中存放啥,8种基本类型和String,还有其他的吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java常量池中存放啥,8种基本类型和String,还有其他的吗?相关的知识,希望对你有一定的参考价值。
常量池中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
谢谢,但是String常量也可以在常量池中的吧,应该说大于一个字节的 Integer 不会被放到常量池,但是String总不可能被限制在一个字节吧。所以 “因为常量池里,只存一个字节的常量。” 表述有误吧?
追答具体你百度一下 java 常量池,里面有详解呢
参考技术B 你是在疑问为什么最后三个不相等是吧?整型在常量池中应该是有数值限制,127在范围内,而666在范围外,所以127可以在常量池内创建,而666则是在堆内创建新对象 参考技术C 针对上例,对象本身一定在堆中,对象引用一定在栈中,对象中的数据在常量池中。 参考技术D 内存里只有小于127的integer,大于这个数的是要新创建的追问嗯,谢谢。是不是当大于127的时候 Integer 对象的创建就无关常量池了?
还有只要加载过的类的对象,都会在常量池中有一份拷贝吗?(好像Integer就是反例,但String好像是正例...)
以上是关于java常量池中存放啥,8种基本类型和String,还有其他的吗?的主要内容,如果未能解决你的问题,请参考以下文章