【JVM系列】字符串常量池

news2025/1/16 14:04:35

字符串常量池

在这里插入图片描述

概念

  • 字符串常量池是一个大小固定的HashTable,默认长度是1009。
  • java6存放在永久代,java7和java8存放到java堆中。

常见面试题

  1. 用双引号定义的字符串是直接存储到常量池,用new String创建的是存放在堆中。
        String s1 = "123";//存储到字符串常量池
        String s2 = new String("123");
        System.out.println(s1 == s2);  //false
        System.out.println(s1.equals(s2)); // true
  1. 常量的拼接存放到常量池,s4也是直接从常量池中获取,是同一个对象。
 		String s3 = "a" + "b" + "c"; // 常量的拼接会存储到常量池
        String s4 = "abc";
        System.out.println(s3 == s4);
  1. 变量拼接常量,等价于StringBuilder的append,所以s3的对象存放在堆中。
 		String s1 = "abc";
        String s2 = "def";
        String s3 = s1 + "def";   // 变量拼接常量,不会存储到常量池。带有字符串变量的拼接,等价于StringBuilder的append
        String s4 = "abcdef";
        System.out.println(s3==s4);  // false
        String s5= s3.intern();
        System.out.println(s4==s5);  //true
  1. 如果s1和s2都是final类型的,那么s1和def的拼接,都是常量。
		final String s1 = "abc";
        final String s2 = "def";
        String s3 = s1 + "def";
        String s4 = "abcdef";
        System.out.println(s3==s4);
  1. new String("ab")创建了几个对象?两个。一个存放在堆中,一个存放在常量池中。

  2. new String("a")+new String("b")创建了几个对象?字符串a,b都在堆和常量池中,字符串变量拼接用的是StringBuilder。生成字符串,会生成字符串ab到堆中,所以总共是6个。

  3. s3是堆空间创造的变量,s4是常量池中对象,但是两个对象是相等的,属于同一个对象。该原理是因为String.intern()方法在1.8之后会将对象的引用地址放到串池,即串池中的对象和引用对象是同一份

        String s3 = new String("a") + new String("b");
        s3.intern();
        String s4 = "ab";
        System.out.println(s3 == s4);  // true
        System.out.println(s3.equals(s4));

包装类和对象池

        Integer i1 = 127;  //这种调用底层实际是执行的Integer.valueOf(127),里面用到了IntegerCache对象池
        Integer i2 = 127;
        System.out.println(i1 == i2);//输出true

        //值大于127时,不会从对象池中取对象
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i3 == i4);//输出false

        //用new关键词新生成对象不会使用对象池
        Integer i5 = new Integer(127);
        Integer i6 = new Integer(127);
        System.out.println(i5 == i6);//输出false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BI技巧丨计算Topn品名

BOSS:白茶,问你个事,能不能动态的根据我们的销量,告诉我销量前三的商品有哪些?这样便于我针对商品进行调控。 白茶:Topn问题? BOSS:什么套不套的,我不懂,你就…

深入理解数据结构 —— 并查集

什么是并查集 并查集是一种数据结构,主要能够高效地实现以下两个功能 给出图中任意两点a,b: union(a,b) :将a,b所在的集合合并起来isConnected(a,b) :问这a,b两点能否通过任意路径连接起来 …

防治新冠病毒感染,儿童如何居家备药?

随着新冠疫情防控的优化,如何为家里的孩子准备药物?这是家长们关心的问题。下面由小熊药师一一解惑。儿童新冠病毒感染主要表现为发热.流涕.咳嗽可能伴有呕吐,可能伴有呕吐.腹泻和其他胃肠道反应。症状一般持续2~5天,其中发热一般…

Map和Set的介绍

目录 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法 5、 Map 和 Set 的注意点 1、Map 和 Set 的概念 Java 提供了 Map 和 Set 的接口,是一种专门用来进行搜索的容器或数据结构,而他搜索…

1.3、操作系统的发展和分类

整体框架 1、手工操作阶段 1.1、主要缺点 用户独占全机、人机速度矛盾导致资源利用率极低 一个用户把自己的程序放入纸带机,等待计算机执行完后,用户再取走自己的数据。 这时候,下一个用户才可以继续接着使用该计算机系统 在一个时间段内只…

1.4、操作系统的运行机制和体系结构

整体框架 1、运行机制 1.1、什么是指令 简单来说,“指令” 就是处理器(CPU)能识别、执行的最基本命令 比如:加法指令就是让 CPU 进行加法运算 1.2、特权指令&非特权指令 新的问题: 有的指令 “人畜无害” 。 比如&#xf…

【NI Multisim 14.0操作实例——最小系统电路】

目录 序言 🥝1.设置工作环境 🥝 2.设置原理图图纸 🥝 3.设置图纸的标题栏 🥝 4.增加元件 🥝 5.放置电阻 🥝 6.放置无极性电容 🥝 7. 放置可变电容 🥝 8. 放置电感 &#x…

概论_第3章_两个随机变量的函数的分布__卷积公式

前面, 我详细介绍了 一个随机变量函数的概率分布 ,本文开始介绍 两个随机变量的函数。注意, 不能写成 两个随机变量函数, 那就会误认为 两个函数,本文主要介绍两个连续型随机变量的函数, 至于离散型&#x…

网络通信原理——数据传输、OSI模型与TCP/IP、3种数据交换技术

数据传输过程 参考:https://blog.csdn.net/qq_37954088/article/details/80355000、https://baike.baidu.com/item/ARP/609343?fraladdin 基本概念 网络通信的协议体系模型:理想模型OSI(Open System Interconnection);常用模型TCP/IP OS…

C/C++ 字符指针指向字符串的几种方法

字符指针指向字符串的方法 由于字符串在内存中连续存储的特点,可以使用指针进行操作,并且指针必须是字符型的。通常将指针指向字符串的首地址,利用指针的后移可以指向后续字符。 字符指针指向字符串一般有三种的方法: &#xff0…

【MySQL进阶】多版本并发控制——MVCC

【MySQL进阶】多版本并发控制——MVCC 文章目录【MySQL进阶】多版本并发控制——MVCC一:MVCC 原理1:版本链2:ReadView 简介3:访问记录的规则4:READ COMMITTED —— 每次读取数据前都生成一个 ReadView5:REP…

vue入门到精通(四)

三、vue3组合式API 1、组合式API 1.1 什么是组合式API 组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。它是一个概括性的术语,涵盖了以下方面的 API: 响应式 API:例…

【安卓学习笔记】Activity的生命周期和加载模式

Activity的生命周期 Activity是安卓应用的重要组成单元之一,其对于安卓的作用类似于Servlet对于Web应用的作用。 整个Activity生命周期的图解如下 具体的生命周期可以总结成如下几个步骤 onCreate():Activity启动后第一个被调用的函数,常用…

1819. 序列中不同最大公约数的数目

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个由正整数组成的数组 nums …

四信5G工业路由器全面支持中国移动研究院5G专网质量探针,满足5G专网高质保障需求

面向工业4.0时代,5G行业应用也在不断拓展,大量的5G专网兴起,“一业带百业”效果显著,截至2022年9月,我国5G行业虚拟专网数量已超过1万张,5G已在全国200余家智慧矿山、1700余家智慧工厂、250余个智慧电网项目…

SOFA Weekly|铜锁探「密」、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&#…

Shiro【授权、整合Spirng、Shiro过滤器】

前言 本文主要讲解的知识点有以下: Shiro授权的方式简单介绍与Spring整合初始Shiro过滤器 一、Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro的授权 Shiro授权的流程和认证的流程其实是差不多的: 1.1Shiro支…

React相关扩展二(Fragment、Content、useContext、组件优化、render props、错误边界)(十)

系列文章目录 第一章:React基础知识(React基本使用、JSX语法、React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state、props、refs)(二&#xff0…

本周推荐 | AB实验低响应情景解决实践

推荐语:本文针对AB实验低响应情景下的增量效果不显著问题,提出通过倾向得分匹配方案来衡量策略增量效果的方法,并将相关方案融入一休平台科学评估体系中。文章理论与实践相结合,深入浅出,强烈推荐。——大淘宝技术数据…

9个非常有趣的HTML5 Canvas动画特效合集

HTML5技术正在不断的发展和更新,越来越多的开发者也正在加入HTML5阵营,甚至在移动开发上HTML5的地位也是越来越重要了。HTML5中的大部分动画都是通过Canvas实现,因为Canvas就像一块画布,我们可以通过调用脚本在Canvas上绘制任意形…