当前位置: 首页 > article >正文

Java-字符串常量池

 

在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、
更节省内存,Java为8种基本数据类型和String类都提供了常量池。

1.为什么要发明常量池

为了节省存储空间以及程序的运行效率,Java中引入了:
1. Class文件常量池:每个.Java源文件编译后生成.Class文件中会保存当前类中的字面常量以及符号信息
2. 运行时常量池:在.Class文件被加载时,.Class文件中的常量池被加载到内存中称为运行时常量池,运行时常
量池每个类都有一份
3. 字符串常量池
此处简单了解下,后等我学到JVM再和兄弟们进行补充,现在我们就先学字符串常量池。

 2.字符串常量池

 

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

前面我们知道 equals 和 == 的区别,==如果不是基本数据类型是需要比较内存地址值的(相当于C里面的指针)

如果直接对其赋值就会在堆上找到这个字符串将内存地址给到虚拟机栈,但是当new一个新对象时,会首先产生新的内存地址值

3.inturn方法

当new一个新对象时,不会进入字符常量池,inturn就是将该字符串进入常量池的方法

未使用inturn前

public static void main3(String[] args) {
        char[] ch = {'a','b','c'};
        String str = new String(ch);
        String ss = "abc";
        System.out.println(str == ss);//flase
    }

 使用后

public static void main4(String[] args) {
        char[] ch = {'a','b','c'};
        String str = new String(ch);
        str.intern();
        String ss = "abc";
        System.out.println(str == ss);//true
    }

在堆上是这样实现的 

 inturn的作用就是将0X12哈希存的0X98和“abc”字符串链接一起

 


http://www.kler.cn/a/386631.html

相关文章:

  • Vulnhub靶场案例渗透[8]- HackableII
  • 【JavaScript】为 setInterval()定义变量,存储ID
  • 微服务即时通讯系统的实现(客户端)----(1)
  • SHA-256哈希函数
  • 一键生成本地SSL证书:打造HTTPS安全环境
  • 测试工程师简历「精选篇」
  • WPF之iconfont(字体图标)使用
  • 【网络】完美配置 HTTPS:优化 SSL/TLS 证书以增强网站安全和性能
  • 山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议
  • 证件照尺寸168宽240高,如何手机自拍更换蓝底
  • Spring 事务@Transactional
  • 神秘的LLVM,熟悉的GNU
  • Conda 使用指南:高效的包管理和环境管理工具
  • 机器学习与成像技术
  • sql单表查询练习题
  • windows C#-使用异常
  • GitLab 提交 C++ 技巧
  • srs http-flv处理过程
  • C/C++语言基础--C++模板与元编程系列四(类型模板参数、整数、指针 、模板类型)
  • 解题--多数元素
  • Oracle RAC的thread
  • unity实习生面试
  • vite+vue项目创建流程;npm error enoent Could not read package.json异常报错问题
  • 表格全量数据下载(FileSaver和xlsx)
  • Mysql基础 03 pymysql库、事务命令
  • 多个NVR同时管理EasyNVR多品牌NVR管理工具/设备:IP常见问题解决方案