String和常量池
来源:互联网 发布:mysql cve 2016 6662 编辑:程序博客网 时间:2024/05/21 11:04
jdk1.6之前常量池属于永久代,jdk1.7以后移到堆中。
String s1 = "abc";// 放在常量池中 String s2 = "abc";// 从常量池中查找 String s3 = new String("abc");//new放在堆中 String s4 = new String("abc"); String s5 = s1.intern(); String s6 = s3.intern(); System.out.println(s1 == s2); System.out.println(s1 == s3); System.out.println(s1 == s5); System.out.println(s1 == s6); System.out.println(s3 == s4); System.out.println("=================="); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s1.equals(s5)); System.out.println(s3.equals(s4));
==:比较引用地址一样
equals:比较的是两个对象的内容是否一样
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
String.intern()方法获得在常量池中的字符串引用,如果常量池中没有则会将字符串加入,然后将该引用放入list持有
确保不会被回收,jdk报错permgem space发生在永久代 jdk7报错 java heap space发生在堆
List<String> list = new ArrayList<>(); int i = 0; while (true) { list.add(String.valueOf(i++).intern()); }
0 0
- String和常量池
- String和字符串常量池
- String字符常量池和intern()
- 扫清java String 和jvm常量池
- String的拼接和常量池
- String和常量池值的变化
- String常量和String对象
- String常量池详解
- String与常量池
- String与常量池
- String常量池理解
- String常量池
- String与常量池
- String Java常量池
- String 与 常量池
- String常量池
- String 结合 常量池
- String常量池
- PAT 1051 Pop Sequence (出栈的合法性)
- 腾讯后台面试
- 基础练习——水仙花数
- 论c语言的static的使用
- scrollview嵌套recycleview滑动冲突的问题之2
- String和常量池
- 在循环中获取索引(数组下标)
- 从今天开始记录我的学习
- 在centos环境下,用python读写文件
- SQL 递归查询(根据指定的节点向上获取所有父节点,向下获取所有子节点)
- cxf用户令牌 WSPasswordCallback
- scala面向对象
- 终于搞定android驱动USB摄像头了!
- 内存分析工具 MAT 的使用