A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白_蓝(八公) 中级黑马   /  2014-2-20 23:42  /  1380 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

{:2_32:}常量池应该先于加载内之前就加载好的么?定义了为常量的值是不是不可以改动?常量池中是否有类型的不同?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
可以理解为内存里面专门为string类型变量开辟的一片区域

譬如String a = "abc"; 当你定义这样一个变量的时候,java此时先会去常量池寻找有没有"abc"这样的字符串,如果有,直接把内存地址交给a, 否则就生成一个"abc"的字符串
当下一个String b = "abc";的时候,发现常量池已经有"abc"了,此时JVM不会再次生成"abc"
改变的都是引用

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。
从这句话看来确实实在内存加载之前就已经加载了。而且也证明了常量池中确实有类型的不同。
如果定义常量的时候使用了关键字final则常量不能被修改。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马