首页 > 其他分享 >String 的 intern() 方法

String 的 intern() 方法

时间:2024-07-23 17:56:25浏览次数:11  
标签:ab String 创建 intern new 方法 常量

问题:

 

  1. String s1 = “a” + “b”; //创建了几个对象?
  2. String s2 = new String(“ab”); //创建了几个对象?
  3. String s3 = new String(“a”) + new String(“b”); //创建了几个对象?
  4. String s4= new String(“a”) + new String(“a”); s4.intern(); //创建了几个对象?

 

关于intern():

String.intern()方法是一种手动将字符串加入常量池中的方法,如果有则返回,没有则是JDK7以及JDK前的区别

 

(1)JDK7前:

String调用intern()方法时回去找常量池是否存在当前内容, 如果不存在会在常量池中创造对象并做引用 如果存在则直接返回


原理:JDK6中常量池位于PermGen(永久代)中,PermGen是一块主要用于存放已加载的类信息和字符串池的大小固定的区域,因此当无用的对象存储多后容易栈溢出。另外问题是堆区和PermGen隔离,容易创建多个相同值对象。

 

(2)JDK7:

Jdk7将常量池从PermGen区移到了Java堆区,执行intern操作时,如果常量池已经存在该字符串,则直接返回字符串引用,否则复制该字符串对象的引用到常量池中并返回。

 

回到开始的问题:

String s1 = “a” + “b”; //创建了几个对象?

 

  • 最多一个。会被优化为"ab",然后寻找常量池是否存在"ab",不存在则创建对象

 

String s2 = new String(“ab”); //创建了几个对象?

 

  • 一个或两个。new时在堆区创建一个对象,如果在常量池不存在"ab"则在常量池再创建一个

 

String s3 = new String(“a”) + new String(“b”);创建了几个对象?

 

  • 至少4个,最多6个。

    首先new两个对象,String的加法会new一个StringBuilder,然后toString()底层会new一个String 另外可能会在常量池创建"a","b"

 

String s4= new String(“a”) + new String(“b”);s3.intern();创建了几个对象?

 

  • 至少4个,最多7个

    同样两个new,一个StringBuilder,一个toString(),"a","b"可能在常量池创建 最后调用intern()方法时候,会去判断"ab"是否存在 JDK7之前:不存在会在常量池new一个对象 JDK7:只创建"ab"引用,并指向堆区"ab"的StringBuilder对象地址

标签:ab,String,创建,intern,new,方法,常量
From: https://www.cnblogs.com/qimoxuan/p/18319212

相关文章

  • 图像数据增强方法概述
    图像数据增强方法概述1.什么是图像数据增强技术?2.图像数据增强技术分类2.1几何变换Python示例代码2.2颜色变换2.3噪声添加3.参考文献1.什么是图像数据增强技术?基础概念:图像增强技术是计算机视觉和图像处理领域中的一个关键技术,主要用于改善图像的质量......
  • pandas数据处理几个数据合并方法的区别
     以下是在Python中的Pandas中进行合并、连接和连接的不同方式和方法:PythonPandas中的DataFrameconcat()concat() 函数负责执行沿轴的连接操作的所有繁重工作,同时对其他轴上的索引(如果有)执行可选的集合逻辑(并集或交集)。在此示例中,创建了三个具有相同的列但不同索引的DataFr......
  • 基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析
    目录第一章、引入和理论基础第二章、数据获取与预处理第三章、模型的建立与评估第四章、模型优化与多模型集成第五章、结果分析和案例研究BIOMOD2是一个R软件包,用于构建和评估物种分布模型(SDMs)。它集成了多种统计和机器学习方法,如GLM、GAM、SVM等,允许用户预测和分析物......
  • 从图像到万象,InternVL 2.0 书生·万象多模态大模型发布!
    从图像到万象,InternVL2.0书生·万象多模态大模型发布!OpenGVLab​目录收起代码开源/模型使用方法:76B大模型,司南评测优于GPT-4O8B端侧小模型,消费级单卡可部署试用Demo:正文开始!1.多模态大模型的开始,AGI的黎明三年演进,多模态先行者的实至名归之路2.更少资源、更高......
  • 为 mixins 中返回 self 的方法注释返回类型
    我正在使用构建器模式,其中(大)类上的大多数方法返回其标识(self),因此被注释为返回它们所属类的类型:classTextBuilder:parts:List[str]#omittedrender:Callable[[],str]#forbrevitydeftext(self,val:str)->"TextBuilder":......
  • HttpClient 发送get和post请求的使用方法
    一Httpclient的简介    HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的,最新的,功能丰富的支持HTTP协议的客户端变成工具包,并且他支持HTTP协议最新的版本和建议。核心API:HttpClient  HttpClientsCloseableHttpClientHttpGetHttpPost二Ht......
  • Android开发 - onMeasure、onLayout和onDraw方法解析
    onLayout、onMeasure和onDraw方法介绍onMeasure(intwidthMeasureSpec,intheightMeasureSpec)onMeasure方法用于测量View的大小。在自定义View中,我们需要重写这个方法,根据自定义View.xml视图的宽高测量模式(MeasureSpec)来计算并设置自定义View的宽高MeasureSpec:测量规范,以......
  • 是否有一种非详细的方法可以通过 mypy 命令禁用多个错误代码?
    如果我想禁用mypy中的多个错误代码(无需修改任何配置文件或向.py文件添加注释),我可以执行以下操作:mypy--disable-error-codetruthy-function--disable-error-codeno-redef.但是,当您想要的错误代码数量较多时,这很容易变得冗长禁用增加。有没有什么方法可以完成相同的......
  • Windows 中重命名文件有哪几种方法?
    在日常的电脑使用中,重命名文件是一项常见且重要的任务。无论你是要整理文件夹、更新文档标题,还是纠正拼写错误,掌握多种重命名文件的方法都可以提高效率,让你的工作流程更加顺畅。以下是简鹿办公汇总的几种在Windows中重命名文件的有效方式,适合不同场景和偏好。1. 右键菜单法......
  • OLOR:已开源,向预训练权值对齐的强正则化方法 | AAAI 2024
    随着预训练视觉模型的兴起,目前流行的视觉微调方法是完全微调。由于微调只专注于拟合下游训练集,因此存在知识遗忘的问题。论文提出了基于权值回滚的微调方法OLOR(OnestepLearning,OnestepReview),把权值回滚项合并到优化器的权值更新项中。这保证了上下游模型权值范围的一致性,有......