Java 的 String与常量池
来源:互联网 发布:模拟摄像头改网络 编辑:程序博客网 时间:2024/06/14 08:57
String str = "Hello";
/**
* 与创建字符串常量不同的是,不管常量池中是否存在相同的字符串,都会在堆内存中创建新的字符串对象
*/
String b = new String("Icon");
/**
* java虚拟机JVM内部维护了一个字符串常量池,每当创建字符串常量时,JVM会到字符串常量池中检查,
* 如果常量池中存在,返回常量池中的字符串对象引用,不存在则创建一个新的字符串对象放入常量池中
* **/
String c = "Icon";
/**intern方法返回字符串对象在字符串常量池中的对象引用,若字符串常量池中尚未有此字符串,
则创建一个新的字符串对象放入常量池中 **/
String d = b.intern();
//比较堆中b字符串对象在常量池中的引用 和 c字符串值 ,intern方法返回常量池中相同的字符串应用对象
//所以 b.intern()返回的对象 和 c 引用的对象是同一个
/**
* 与创建字符串常量不同的是,不管常量池中是否存在相同的字符串,都会在堆内存中创建新的字符串对象
*/
String b = new String("Icon");
/**
* java虚拟机JVM内部维护了一个字符串常量池,每当创建字符串常量时,JVM会到字符串常量池中检查,
* 如果常量池中存在,返回常量池中的字符串对象引用,不存在则创建一个新的字符串对象放入常量池中
* **/
String c = "Icon";
/**intern方法返回字符串对象在字符串常量池中的对象引用,若字符串常量池中尚未有此字符串,
则创建一个新的字符串对象放入常量池中 **/
String d = b.intern();
//比较堆中b字符串对象在常量池中的引用 和 c字符串值 ,intern方法返回常量池中相同的字符串应用对象
//所以 b.intern()返回的对象 和 c 引用的对象是同一个
System.out.println(b.intern() == c);
System.out.println(d == c);
/**
* 把常量pool 和 c字符串对比,两者引用的都是常量池中的字符串对象Icon,所以是相等的
*/
System.out.println(pool == c);
/**
* 实际声明一个字符串字面量s时,s是存在栈中保存了一个指向方法区中常量池里的一个地址。
* 当字符串进行拼接时,如果是单纯的已知字面量拼接,在编译期间,编译器会自动将拼接结果在常量池搜索并存入,
* 如果是字符串和变量、对象拼接时,由于变量和对象是不可预知部分,编译器不会进行优化,需等待运行时才能知道变量、对象地址,
* 所以jvm在运行时才将拼接结果开辟新的堆内存地址并存入结果值。
*/
阅读全文
0 0
- Java 的 String与常量池
- Java 常量池与String
- java : String 与常量池
- JAVA 常量池与String
- java String的常量池
- JAVA String类与常量池,堆之间的错综复杂...
- Java String 内存机制与常量池
- java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- Java中的String与常量池
- JavaScript开发的45个经典技巧
- js 将字符串转换为json对象
- js打乱数组顺序最佳解决方案
- js获取input上传图片的尺寸
- Ubuntu下搭建 eclipse+NDK for android JNI 的开发环境
- Java 的 String与常量池
- 感知机学习算法的拓展---非线性可分数据问题
- 《统计学习方法》笔记——AdaBoost
- STL之map的使用方法
- 分享一款好用的PDF转换器的免费注册验证码-All PDF Converter
- Restful API实践经验
- 使用Angular与TypeScript构建Electron应用
- 5.最长连续回文串
- jquery中的attr属性