浅谈java常量池

 更新时间:2016年06月12日 12:47:17   投稿:jingxian  
下面小编就为大家带来一篇浅谈java常量池。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

java常量池技术

java中常量池技术说的通俗点就是java级别的缓存技术,方便快捷的创建一个对象。当需要一个对象时,从池中去获取(如果池中没有,就创建一个并放入池中),当下次需要相同变量的时候,不用重新创建,从而节省空间。

java八种基本类型的包装类和对象池

java中的基本类型的包装类、其中Byte、Boolean、Short、Character、Integer、Long实现了常量池技术,(除了Boolean,都只对小于128的值才支持)

比如,Integer对象

Integer i1 = 100;
Integer i2 = 100;
// 上面两行代码,使用自动装箱特性,编译成
// Integer i1 = Integer.valueOf(100);
// Integer i2 = Integer.valueOf(100);
System.out.println(i1 == i2);

Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);

执行结果:

true
false

原因我看下Integer对象的valueOf()的源码

public static Integer valueOf(int i) {
   assert IntegerCache.high >= 127;
   if (i >= IntegerCache.low && i <= IntegerCache.high)
     return IntegerCache.cache[i + (-IntegerCache.low)];

   // 对于不在这个范围的就重新创建一个Integer对象   
   return new Integer(i);
}

对于-128~127的Integer对象才会到IntegerCache里获取缓存,使用常量池技术。

private static class IntegerCache {  ...  static final Integer cache[];
// IntegerCache类的cache是用final修饰的,是个静态数组,起到缓存的作用}

String类的常量池

String类型的常量池比较特殊,String类常量池在jdk7中放在了java heap中。使用方法包括:

•直接使用字面量声明,如String s = "abc";

•使用String.intern();

以上这篇浅谈java常量池就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mybatis集成Spring的实例代码_动力节点Java 学院整理

    Mybatis集成Spring的实例代码_动力节点Java 学院整理

    这篇文章主要介绍了Mybatis集成Spring的实例代码,需要的朋友可以参考下
    2017-09-09
  • Java Annotation详解及实例代码

    Java Annotation详解及实例代码

    这篇文章主要介绍了Java Annotation详解及实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • 一篇文章带你深入了解Java基础(3)

    一篇文章带你深入了解Java基础(3)

    这篇文章主要给大家介绍了关于Java中方法使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • java调用shell命令并获取执行结果的示例

    java调用shell命令并获取执行结果的示例

    今天小编就为大家分享一篇java调用shell命令并获取执行结果的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Spring Security如何为用户示例添加角色详解

    Spring Security如何为用户示例添加角色详解

    目前我正在用Java开发一个基于Spring Boot的web应用程序,下面这篇文章主要给大家介绍了关于Spring Security如何为用户示例添加角色的相关资料,需要的朋友可以参考下
    2022-10-10
  • 一篇文章带你入门java多线程

    一篇文章带你入门java多线程

    这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下
    2021-08-08
  • 这一次搞懂Spring的XML解析原理说明

    这一次搞懂Spring的XML解析原理说明

    这篇文章主要介绍了这一次搞懂Spring的XML解析原理说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 浅析Java ReentrantLock锁的原理与使用

    浅析Java ReentrantLock锁的原理与使用

    这篇文章主要为大家详细介绍了Java中ReentrantLock锁的原理与使用,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2023-08-08
  • 详解Spring Boot配置文件application.properties

    详解Spring Boot配置文件application.properties

    在本文中我们给大家整理了关于Spring Boot 的配置文件 application.properties的相关知识点内容,需要的朋友们参考学习下。
    2019-06-06
  • Java中多态性的实现方式

    Java中多态性的实现方式

    这篇文章主要介绍了Java中多态性的实现方式,什么是多态?通过简单的一道题目帮大家理解java多态性,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09

最新评论