Java 常量池的实例详解
2017-09-11 15:10
609 查看
Java 常量池的实例详解
Java的常量池中包含了类、接口、方法、字符串等一系列常量值。常量池在编译期间就已经确定,并保存在*.class文件中
一、对于相同的常量值,常量池中只保存一份拷贝。
而且,当一个字符串由多个字符串常量链接而成时,多个字符串被组成一个字符串常量。
例如:
package lxg; public class main { public static void main(String[] args) { String name = "lengxuegang"; String nickname = "lengxuegang"; String signature = "leng" + "xue" + "gang"; System.out.println(name == nickname); System.out.println(name == signature); } }
结果为:
true true
注意:由new String()创建的字符串不是常量,不能在编译期间确定。因此也就不能放入常量池中,而是有自己的地址空间。
二、常量池在运行期间由JVM装载,并且可以扩充。
String.intern()方法就是扩充常量池的一个方法。当String的一个对象str调用intern()方法时,Java首先检索常量池中是否有相同Unicode编码的字符串常量。如果有,则返回该字符串常量的引用;如果没有,则在常量池中增加一个Unicode编码等于str的字符串常量,同时返回该字符串常量的引用。
例如:
package lxg; public class main { public static void main(String[] args) { String name = "lengxuegang"; String nickname = new String("lengxuegang"); System.out.println(name == nickname); //调用intern方法后,nickname指向常量池中"lengxuegang"的引用,此时name与nickname相同 nickname = nickname.intern(); System.out.println(name == nickname); } }
输出结果为:
false true
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
相关文章推荐
- Java 两种延时thread和timer详解及实例代码
- Java移位运算符详解实例
- 详解Java编程JDialog窗体的用法及实例
- Java 反射机制详解及实例代码
- java中的static{}块的实例详解
- Java操作FTP工具类(实例详解)
- Java 线程池ExecutorService详解及实例代码
- java split用法详解及实例代码
- java 语句块的使用详解及实例
- java 接口回调实例详解
- Java分页内容实例详解
- Java输入输出流详解及应用实例
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- java代码块知识详解及应用实例
- Java 多线程实例详解(二)
- Java 多线程实例详解(三)
- java 迭代器模式实例详解
- Protocol Buffer技术详解(Java实例)
- java 加密之RSA算法加密与解密的实例详解
- Java 选择排序、插入排序、希尔算法实例详解