zoukankan      html  css  js  c++  java
  • java中的常量池

    1.class常量池

    在类编译的时候就创建了,保存在class文件中,保存类名,方法名等信息,是静态的

    2.字符串常量池

    在一篇文章中说的是1.7之前是保存在方法区。1.7之后是保存在堆中,因为方法区保存不下了。字符串常量池,顾名思义,就是保存String对象的,比如但我们

    String a= "a"

    这个时候,编译时,首先会在字符串常量池中去找有没有“a”这个值,如果有,这直接返回这个值的地址,如果没有,则会在常量池中新建一个“a”保存。

    所以说,如果我们

    String a = "a"
    String b = "a"
    while(a==b){
    。。。
    }

    这样比较的话,a==b是会返回true的, == 是比较两个变量的地址,因为“a”在常量池中的地址是相同的,所以也就可以比较了。

    但是如果是这样创建的话

    String a = new String("a")

    编译时,同样会在常量池中去找,没有就创建一个,并且,在运行时,jvm还会在堆中分类一个空间去保存"a",并且栈中的a保存的是现在在堆中的这个地址,所以如果这个时候用 == 号去比较的话,返回的就是false,因为两个保存的地址不同了。

    字符串常量池中的值不会被gc垃圾回收装置清楚,因为好像有一个什么table,使每一个值都会有一个引用。

    3.运行时常量池

    保存在方法区,是可变的,动态存放运行时class常量池或者新的常量

    世间种种的诱惑,不惊不扰我清梦
  • 相关阅读:
    最佳牛栏(前缀和+二分)
    分形之城(递归)
    约数之和(两种方法)
    递归实现指数型枚举
    【Luogu P3704】 [SDOI2017]数字表格
    【Luogu P2257】 YY的GCD
    【Luogu P2522】 [HAOI2011]Problem b
    【Luogu P3455】 [POI2007]ZAP-Queries
    【Luogu P3597】 [POI2015]WYC
    【Luogu T145192】 【2020.8.23NOIP模拟赛】最优路线
  • 原文地址:https://www.cnblogs.com/javalisong/p/12213881.html
Copyright © 2011-2022 走看看