黑马程序员技术交流社区

标题: 提一个关于常量池的疑问! [打印本页]

作者: 白_蓝(八公)    时间: 2014-2-20 23:42
标题: 提一个关于常量池的疑问!
{:2_32:}常量池应该先于加载内之前就加载好的么?定义了为常量的值是不是不可以改动?常量池中是否有类型的不同?
作者: asvsass    时间: 2014-2-20 23:48
可以理解为内存里面专门为string类型变量开辟的一片区域

譬如String a = "abc"; 当你定义这样一个变量的时候,java此时先会去常量池寻找有没有"abc"这样的字符串,如果有,直接把内存地址交给a, 否则就生成一个"abc"的字符串
当下一个String b = "abc";的时候,发现常量池已经有"abc"了,此时JVM不会再次生成"abc"
改变的都是引用
作者: 徐老爹    时间: 2014-2-20 23:51
常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。
从这句话看来确实实在内存加载之前就已经加载了。而且也证明了常量池中确实有类型的不同。
如果定义常量的时候使用了关键字final则常量不能被修改。

作者: kkopopo    时间: 2014-2-20 23:59
1,好吧我们读懂楼组要问啥?待编辑。。。。。
2,不可编译失败
3,可以
作者: Amorvos    时间: 2014-2-21 00:05
Java语言中一切都是动态的,常量池中除了包含代码中所定义的各种基本类型和对象的常量值外,还包含一些以文本形式出现的符号引用,比如:类和接口的全限定名;字段的名称和描述符;方法的名称和描述符。
给楼主一个博客,你看一下吧http://blog.sina.com.cn/s/blog_4be8ae2c01000a9i.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2