首页 > 其他分享 >字符串常量池

字符串常量池

时间:2024-08-02 09:52:19浏览次数:6  
标签:ab 常量 对象 创建 字符串 String

字符串常量池

   概要

   字符串常量池 是 JVM 为了提升性能和减少内存消耗,针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。

   一、内存区域

   1)JDK1.7之前

  运行时常量池(字符串常量池也在里边)是存放在方法区,此时方法区的实现是永久代。

   2)JDK1.7

   字符串常量池被单独从方法区移到堆中,运行时常量池剩下的还在永久代(方法区)。

   说明:主要是因为永久代(方法区实现)的 GC 回收效率太低,只有在整堆收集 (Full GC)的时候才会被执行 GC。Java 程序中通常会有大量的被创建的字符串等待回收,将字符串常量池放到堆中,能够更高效及时地回收字符串内存。

   3)JDK1.8

   永久代更名为元空间(方法区的新的实现),但字符串常量池池还在堆中,运行时常量池在元空间(方法区)。

   二、字符串常量池的应用

   1. 堆中创建字符串对象

1 // 在堆中创建字符串对象”ab“
2 // 将字符串对象”ab“的引用保存在字符串常量池中
3 String aa = "ab";
4 
5 // 直接返回字符串常量池中字符串对象”ab“的引用
6 String bb = "ab";
7 
8 System.out.println(aa==bb);// true

   2. String s1 = new String("abc");这句话创建了几个字符串对象?

   会创建 1 或 2 个字符串对象。1、如果字符串常量池中不存在字符串对象“abc”的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。

   示例代码(JDK 1.8):

   String s1 = new String("abc");


   参考链接:

   https://javaguide.cn/java/basis/java-basic-questions-02.html

标签:ab,常量,对象,创建,字符串,String
From: https://www.cnblogs.com/hld123/p/18338058

相关文章

  • 字符串相关函数、二维数组-
    目录strcpy--字符串复制函数strcat--字符串拼接函数strcmp--字符串对比函数字符串相关函数:二维数组初始化:strcpy--字符串复制函数char*strcpy(char*dest,constchar*src);功能:  将src中字符串拷贝到dest中 用法: strcpy(dest,src);//dest是一个字......
  • 深入理解变量与常量的奥秘
    引言在C语言编程中,变量与常量是构建程序逻辑与功能的基石。变量灵活多变,用于存储程序运行时可能改变的数据;常量则坚定不移,表示程序中不应改变的值。掌握这两者的使用,是深入学习C语言不可或缺的一步。本文将深入探讨C语言中的变量与常量,揭示它们的奥秘,助你在编程道路上稳步前行。......
  • 重头开始嵌入式第八天(字符串,二维数组)
    今天继续介绍字符数组以下是一些常见的C语言字符串处理函数的介绍、函数本体、返回值、用法及实现示例: 以下是 puts 和 gets 函数的介绍、函数本体、返回值、用法及实现示例:字符处理函数puts() 函数-函数意思:将字符串输出到标准输出(通常是屏幕)并换行-函数......
  • 11:Python字符串的魔法属性2
    test='alex'v=test[2]#索引,下标,获取字符串中的某一个字符print(v,-1)test='alexsasdf'v=test[0:3]#0=<v<3print(v,-2)v1=test[0:-1]#切片print(v1,-3)v2=len(test)print(v2,-4)v3=len("我是中国人")#len获取当前字符串中由几个字符组成,python2......
  • 正则表达式:有没有一种方法可以提取单引号之间的所有子字符串,而不提取撇号之间的子字符
    基本上,我有一个包含英语语句的数据集。有些语句包含前导/尾随标点符号,所以我想清理和标准化它们。标准化的标准是删除所有前导/尾随标点符号,语句的第一个字符大写,并且语句以句点结尾。我有一个函数可以执行此操作并将其应用于数据集中的每一行。如果有帮助的话,这里是一个代码......
  • 【笔记】字符串选讲 2024.8.1
    [COCI2015-2016#5]OOP(Trie)P6727[COCI2015-2016#5]OOP-洛谷|计算机科学教育新生态(luogu.com.cn)正反串分别建Trie,可以搞出两个dfn区间,加之长度限制,三维数点。有\(O(n\logn)\)做法。将字典串\(S[1..m]\),对所有\(1\leqi\leqm\),将\(S[i+1,m]\)的hash值插入......
  • C/C++ 字面常量的注意事项
    在C/C++中使用字面常量时,有几个重要的注意事项需要考虑,以确保代码的准确性和可移植性。下面是一些关键要点:整数字面量:默认情况下,整数字面量是int类型。如果字面量的值超出了int的范围,它将被视为longint或longlongint,这取决于它的值和编译器。可以在整数字面量后添加L或l......
  • 假的字符串 Trie+拓扑排序
    假的字符串Trie+拓扑排序题目链接题意:给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们。思路:我们可以对每个字符串单独判断,考虑当前\(s_i\)为字典序最小的串。那么首先要满足的条件就是\(s_i\)的前......
  • 使用 python 将 JSON 数据空值导入数据库。收到此错误 - 数据需要字符串或类似字节的
    我正在尝试使用python将JSON数据集导入到我的PostgreSQL数据库,但在尝试导入null值时会抛出错误。表的名称是Loan_info。我在python中尝试过此操作:-forfieldinloan_info:ifloan_info[field]in['Null','null',None]:......
  • c语言去掉字符串左右两边的空格
    #include<iostream>usingnamespacestd;#include<string.h>#include<stdio.h>/*去掉右边的空格*/char*rtrim(char*str){ intlen=0; inti=0; len=strlen(str); for(i=len;i>0;i--) { if(*(str+(i-1))=='�......