Java中String类的intern()方法深入理解。
来源:互联网 发布:跨域调用js方法 编辑:程序博客网 时间:2024/04/28 18:05
我们很少用到intern()这个方法,那么这个方法有什么用呢?
先看一段代码:
String s1 = new String("RD");// 指向堆对象引用String s2 = s1.intern(); // 向常量池添加s1 并且S2引用常量池String s3 = "RD";System.out.println(s1 == s2);System.out.println(s3 == s2);System.out.println(s3 == s1);
这一段的输出结果为:
falsetruefalse
通过注释我们理解到,intern()方法是把对象的引用添加到常量池(jdk1.7之后运行时常量池被移动到了Java堆里(Java Heap))。
所以上段代码是吧字符串"RD"放到常量池中一份,并返回引用指向s2。s3这种直接赋值的声明方法,是看常量池中存不存在"RD",若不存在,在常量池中创建并引用,若存在,直接引用。所以第第二行输出为true。
因为s1的引用是java堆中的对象,所以第一行和第三行输出false。
再看一段代码:
String s0 = "RD";String s1 = new String("RD");String s2 = s1.intern();String s3 = "RD";System.out.println(s1 == s2);System.out.println(s3 == s2);System.out.println(s3 == s1);System.out.println(s0 == s2);
falsetruefalsetrue
再看下边三段代码:
代码1:
String s1 = new String("RD");String s2 = s1.intern();System.out.println(s2 == s1);输出为:
false
代码2:
String s1 = new String("RD") + new String("_Lee");String s2 = s1.intern();System.out.println(s2 == s1);
输出为:
true
代码3:
String s0 = "RD_Lee";String s1 = new String("RD") + new String("_Lee");String s2 = s1.intern();System.out.println(s2 == s1);输出为:
false
通过1,2,3段代码对比我们发现,当一个组合声明的字符串时,intern()方法不仅把s1的字符串放进常量池中并返回引用给s2,且同时把引用返回给了s1;所以推测intern还会把组合字符串的引用从堆中指到常量池,为了验证此想法,我们试验如下代码。
代码1:
String s1 = new String("RD") + new String("_Lee");s1.intern();String s2 = "RD_Lee";System.out.println(s2 == s1);
其返回值为:true
代码2:String s1 = new String("RD") + new String("_Lee");String s2 = "RD_Lee";System.out.println(s2 == s1);
其返回值为:false
代码3:String s1 = new String("RD");s1.intern();String s2 = "RD";System.out.println(s2 == s1);
其返回值为:false
通过代码1和代码3我们可以了解到,intern()可以将通过"+"声明的这种字符串从常量池中创建,并返回引用给自身。对单独的new的字符串不可以。通过代码1和代码2我们了解到,确实是intern()方法起了作用,并不是这种“+”创建方式会直接在常量池中创建字符串。
测试版本:jdk1.8.
欢迎指正错误~
阅读全文
1 0
- Java中String类的intern()方法深入理解。
- java中String的intern()方法理解
- java String 中 intern方法的理解
- 深入理解Java虚拟机(6)--String.intern()方法
- String中intern的方法 String.intern();
- JAVA的String中intern的方法
- Java中String对象的intern()方法
- java中String对象的intern方法
- java String 中 intern方法的概念
- 关于java中String的 intern()方法
- java String 中 intern方法的概念
- 深入理解String和intern方法
- String.intern方法的理解
- JAVA中String类的intern()方法的作用
- JAVA中String类的intern()方法的作用
- JAVA中String类的intern()方法的作用
- JAVA中String类的intern()方法的作用
- JAVA中String类的intern()方法的作用
- 关于项目报错Dynamic Web Module 3.0 requires Java 1.6 or newer 的解决方法
- Centos7 修改运行级别
- 将Eclipse文件导入到Android studio后编译遇到的一些问题(一)
- AS3聊天单行输入框图文混排完美实现
- Kotlin 第十六章:内联函数
- Java中String类的intern()方法深入理解。
- PKG_CHECK_MODULES未定义
- SpringBoot系列-Redis使用
- 给 Android 开发者的 RxJava 详解
- SpringMVC基于注解Controller学习
- vue + echars完成图表
- UTC时间与北京时间的关系
- 第三周 项目四 顺序表的应用(1)
- css中的单位