IT学习站-137zw.com

作者: 杨柳657
查看: 58|回复: 0

more +资源更新Forums

more +随机图赏Gallery

价值368元 从Docker到K8S实战视频教程 五年工程师主讲 百度云价值368元 从Docker到K8S实战视频教程 五年工程师主讲 百度云
价值299 opencv+tensorflow入门人工智能图像处理 百度云 网盘 下载价值299 opencv+tensorflow入门人工智能图像处理 百度云 网盘 下载
价值199元 Nginx中间件搭建负载均衡安全防护动静分离视频 ...价值199元 Nginx中间件搭建负载均衡安全防护动静分离视频 ...
价值348元 RabbitMQ消息中间件技术精讲2018视频教程 百度云价值348元 RabbitMQ消息中间件技术精讲2018视频教程 百度云
云豹直播平台全套源码无限制完美运营版(安卓+IOS)源码云豹直播平台全套源码无限制完美运营版(安卓+IOS)源码
Spring Security4企业权限管理视频,完整版课程下载Spring Security4企业权限管理视频,完整版课程下载

String 的 intern() 方法解析

String 的 intern() 方法解析

[复制链接]
杨柳657 | 显示全部楼层 发表于: 2019-11-14 15:05:02
杨柳657 发表于: 2019-11-14 15:05:02 | 显示全部楼层 |阅读模式
查看: 58|回复: 0

你还没有注册,无法下载本站所有资源,请立即注册!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一、概述

JDK7 之前和之后的版本,String 的 intern() 方法在实现上存在差异,本文的说明环境是 JDK8,会在文末说明 intern() 方法的版本差异性。
intern() 方法是一个 native 的方法,返回常量池中的字符串引用,主要体现在以下两点:

  • 如果常量池中已存在该字符串,则直接返回常量池中该对象的引用。
  • 如果常量池中不存在该字符串,则在常量池中加入该对象引用并返回。
二、示例说明

一般我们创建字符串的方式有以下三种:

  • 字面量创建方式,例如 String s = "java"
  • new String() 创建方式,例如 String s = new String("java")
  • StringBuilder/StringBuffer 创建方式,例如 String s = new StringBuilder("ja").append("va").toString()
字面量创建方式,会在字符串常量池中创建字符串实例,并返回该引用;new String() 和 StringBuilder/StringBuffer 创建方式都是在堆(Heap)上创建字符串实例,并返回该引用。

  • s1 == s1.intern() 返回 true,因为字面量的创建方式是在字符串常量池中生成实例,而 intern() 方法返回常量池中的字符串引用,两个引用自然是同一个。
  • s1 == s2 返回 false,因为 new String() 的方式是在堆(Heap)上创建实例,二者不是同一个引用。
  • s1.equals(s2) 返回 true,equals 方法是用来比较的是两个字符串的内容是否相等。
  • s1 == s2.intern() 返回 true,当 s2 调用 intern() 方法的时候,发现常量池中已经存在该字符串,则直接返回了该引用(s1 的引用)。
  • s1 == s3 返回 false, StringBuilder/StringBuffer 创建方式是在堆(Heap)上创建字符串实例,二者不是同一个引用。
  • s2 == s3 返回 fasle,s2 和 s3 都是 new 出来的字符串实例,在堆(Heap)上存储不同的位置,自然不是同一个实例。
  • s2.intern() == s3.intern() 返回 true,前面说明 s2 的 intern() 返回的是 s1 的引用,s3 的 intern() 也是一样的道理,因此 s2 的 intern() 和 s2 的 intern() 返回的都是 s1 的引用,所以相等。
三、和 JDK6 的版本差异

JDK7 之后的 intern() 方法和之前版本的差异主要体现在:如果常量池中不存在该字符串时的处理机制。
JDK7 之后的版本,如果常量池中不存在该字符串,则在常量池中加入该对象引用并返回。注意,关键词 — 加入对象引用!
JDK7 之前的版本呢?它的处理机制是,如果常量池中不存在该字符串,则在常量池中新建一个字符串实例并返回该实例引用。关键词:新建实例!

来源:http://www.137zw.com
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
137zw.com IT学习站致力于免费提供精品的java技术教程和python技术教程,CCNA书籍/资料/CCNP书籍/资料教程/CCIE书籍/资料/H3C学习/认证/一级建造师考试/微软学习/认证/包括基础教程和高级实战教程,同时也提供分享网站源码下载和互联网相关一系列的技术教程,我们想做的就是让知识分享更有价值!(IT学习站官方唯一域名地址:www.137zw.com 请谨防假冒网站!)本站所有资源全部收集于互联网或网友自行分享,分享目的仅供大家学习与参考,如无意中侵犯您的合法权益,请联系本站管理员进行删除处理!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

浙ICP备19022368号-1|Archiver|手机版|IT学习站-137zw.com

GMT+8, 2020-7-6 01:25 , Processed in 0.195670 second(s), 32 queries .

快速回复 返回顶部 返回列表