【数据结构】String常量池

news/2024/4/27 19:31:04

文章目录

  • String常量池
      • 一、常量池的概念
      • 二、常见的常量池
      • 三、字符串常量池(StringTable)
        • 1.String的创建过程
        • 2.intern方法

String常量池

一、常量池的概念

    public static void main(String[] args) {String s1 = "happy";String s2 = "happy";String s3 = new String("happy");String s4 = new String("happy");System.out.println(s1 == s2);//trueSystem.out.println(s1 == s3);//falseSystem.out.println(s3 == s4);//false}

创建的四个字符串互相比较,就会发现,虽然字符内容相同,但是比较结果不同

这里先不考虑用equals,因为equals只比较内容,而我们要考虑的是这些字符串的地址值

  • 这段代码:s1和s2引用的是同一个对象,而s3和s4不是

  • Java为八种基本数据类型和String类都提供了常量池,因为有些字面类型的常量会频繁使用,为了提高效率,节省内存

    池就是为了提升效率,在一定范围内存储内容,随用随取

二、常见的常量池

1.class文件常量池

  • 每个.Java源文件编译后,生成的.Class文件会保存当前类当中的字面常量以及字符信息

2.运行时常量池

  • 在.Class文件被加载时,.Class文件中的常量池被加载到内存中,称为运行时常量池(每个类都有)

3.字符串常量池

  • 接下来主要介绍

三、字符串常量池(StringTable)

字符串常量池在JVM中是StringTable类,它的本质的一个固定大小的哈希表(HashTable)

在Java8中,字符串常量池的位置在堆中,可以设置大小,有范围限制,最小是1009

1.String的创建过程
  • 只要是双引号“ ”引起来的的,都会放在常量池当中

  • 先在常量池中查找,是否有当前这个字符串,如果存在,则不会再存

  • 因为s1已经存进字符串常量池中,s2就会从常量池中把s1存的取出来。所以s1和s2指的是同一个对象
    在这里插入图片描述

  • 而s3是新创建的一个String对象,这个对象的value指向的是original.value。所以s3和时s1指的不是一个对象

在这里插入图片描述

  • 只要是new的对象,都是唯一的
2.intern方法
  • intern方法是一个native方法
  • 手动将创建的String对象添加到常量池
    public static void main(String[] args) {char[] c = {'a','b','c'};String s1 = new String(c);// s1.intern();String s2 = "abc";System.out.println(s1==s2);//有intern true,没有则是false}

在这里插入图片描述

在这里插入图片描述

点击移步博客主页,欢迎光临~

偷cyk的图

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

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

相关文章

Python学习笔记(一)

一:安装Python(省略) 二:测试运行 三:Python解释器: 四:Python语法知识: 4.1:字面量: 4.2:注释: 4.3:变量 4.4&#xff…

基于spring boot的汽车4s店管理系统

摘 要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,汽车4s店管理系统当然不能排除在外。汽车4s店管理系统是在实际应用和软件工程的开发原理之上,运用java语言以及SpringBoot框架…

git基础-获取git仓库

通过本章的学习,应该能够配置和初始化一个仓库,开始和停止跟踪文件,暂存和提交更改。我们还将展示如何设置 Git 来忽略特定的文件和文件模式,如何快速轻松地撤销错误,如何浏览项目的历史记录并查看提交之间的更改&…

Keil笔记(缘更)

Keil 一、使用Keil时可能会出现的问题1.Project框不见了2.添加文件时找不到3.交换文件位置4.main.c测试报1 warning5.搜索CtrlF 二、模电常识(白话随便版)一、名词解释二、基础门电路 三、STLINK点灯操作1.配置寄存器进行点灯2.使用库函数进行点灯 四.GPIO1.LED闪烁4.按键控制L…

Matlab从入门到精通课程

教程介绍 MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 学习地址 链接:https://pan.baidu.com/s/1PxGarBwQusMzwPVqcE…

LeetCode:2642. 设计可以求最短路径的图类(SPFA Java)

目录 2642. 设计可以求最短路径的图类 题目描述: 实现代码与解析: SPFA 原理思路: 2642. 设计可以求最短路径的图类 题目描述: 给你一个有 n 个节点的 有向带权 图,节点编号为 0 到 n - 1 。图中的初始边用数组 e…