JAVA中intern()方法的详解
2018-02-02 16:00
162 查看
很多童鞋可能在Java考试中或者笔试中遇到String字符串比较相等的问题,今天就来谈一谈
在JAVA虚拟机中,有运行时数据区,包含线程共享的:堆,方法区 和线程隔离的:程序计数器,Java虚拟机栈,本地方法栈.其中方法区包含一块取域,叫做常量池,因为String类型被用到的频率高,所以HotSpot将它放入了常量池.
String.intern()是一个Native方法,它的作用是:如果字符常量池中已经包含一个等于此String对象的字符串,则返回常量池中字符串的引用,否则,将新的字符串放入常量池,并返回新字符串的引用’
不同版本的JAVA虚拟机对此方法的实现可能不同,下面我们通过一个例子来说明
返回结果:
在JAVA虚拟机中,有运行时数据区,包含线程共享的:堆,方法区 和线程隔离的:程序计数器,Java虚拟机栈,本地方法栈.其中方法区包含一块取域,叫做常量池,因为String类型被用到的频率高,所以HotSpot将它放入了常量池.
Intern()
在<深入理解Java虚拟机>一书中解释道:String.intern()是一个Native方法,它的作用是:如果字符常量池中已经包含一个等于此String对象的字符串,则返回常量池中字符串的引用,否则,将新的字符串放入常量池,并返回新字符串的引用’
不同版本的JAVA虚拟机对此方法的实现可能不同,下面我们通过一个例子来说明
package com.tangbaobao.test1; import org.junit.jupiter.api.Test; /** * 测试intern方法 * * @author 唐学俊 * @create 2018/02/02 15:19 * * **/ public class Test2 { @Test public void fun1(){ String str1 = new StringBuilder("计算机").append("软件").toString(); String str2 = new StringBuilder("Ja").append("va").toString(); String str3 = "java"; String str4 = new String("java"); System.out.println(str1.intern() == str1);//因为之前没有所以创建的引用和intern()返回的引用相同 System.out.println(str2.intern() == str2);//"java在StringBuilder()之前已经出现过",所以intern()返回的引用与新创建的引用不是同一个 System.out.println(str3 == str4); } }
返回结果:
true false false
相关文章推荐
- Java中==运算符与equals方法的区别及intern方法详解
- Java内存分析(3)——String的Intern方法详解
- Java基础-String类的intern()方法详解
- Java中String.intern()方法详解
- java辅导:五种JSP页面跳转方法详解
- Java多线程技术中所有方法详解
- Java中正则表达式使用方法详解-Java基础-Java-编程开发
- java clone方法使用详解
- [转]Java Calendar方法详解
- 如何使用Java操作文本文件的方法详解 (转)
- FckEditor for java 2.4的JSP 配置方法详解
- 使用Java操作文本文件的方法详解
- 使用Java操作文本文件的方法详解
- FckEditor for java 2.4的JSP 配置方法详解
- Java中的main()方法详解
- java clone方法使用详解
- Java中正则表达式使用方法详解
- JAVA Calendar方法详解
- Java的String类中的intern()方法
- 学习总结:java面试方法重写详解,静态代码块和构造方法执行顺序问题