日本java和中国java Java运行时常量池是什么?
Java运行时常量池是什么?
在回答这个问题之前,让我们先谈谈什么是常量。
用final修改的成员变量称为常量。一旦指定了常量的值,就不能更改
!final修改了三种类型的变量:静态变量、实例变量和局部变量,它们代表三种类型的常量。
事实上,Java池中有两种类型的常量:静态常量和运行时常量。
1)所谓的静态常量池是*中的常量池。类文件。类文件中的常量池不仅包含字符串(number)的文字量,还包含类和方法的信息,占用了类文件的大部分空间。
2)运行时常量池是JVM虚拟机将类文件中的常量池加载到内存中,并在完成类加载操作后将其保存在方法区域中。我们经常在方法区域中将常量池称为运行时常量池。
只要我们在Java中谈论池的概念,在大多数情况下,它是为了减少频繁的创建和破坏。使用一种方法来管理这个过程。让我们简单地谈谈这个问题,以供具体参考。深入了解Java虚拟机书籍,了解更多。
小木的答案。站在巨人的肩膀上,按照他自己的理解和别人的理解,你可以走得更远更快。
字符串常量池是在方法区中还是在独立的区域中?
string STR=“nihao”当程序开始执行这个代码时,它必须创建一个对象,但是对象创建之后,它是一个不可更改的常量,对象放在字符串池中,也就是你调用的常量池
如果我以后再写代码:string other=“Nihao”
STR和other的地址是一样的,因为STR和other的声明方式是一样的。创建STR对象时,如果字符串池中没有“nihao”常量,请创建一个。在创建其他对象时,如果发现字符串池中有“nihao”常量,就直接使用它
string B1=New string(“nihao”)
但是如果用上述方法直接New string(),则A1和B1引用的对象不在字符串池中,而是在堆中。但是,new string()的参数“nihao”也是一个字符串。这根绳子是从哪里来的?如果我们拆分代码,我们会理解它:
string A1=new string(para)
会发现代码字符串A1=new string(“nihao”)实际上创建了两个对象,一个是string object,存储在堆中,另一个是string constant object,存储在字符串池中
日本java和中国java java堆和栈的区别 java常量池在方法区还是堆
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。