深入理解String
来源:互联网 发布:python验证码识别 编辑:程序博客网 时间:2024/05/16 06:14
我们都知道String是不可变的(immutable),不变性的体现是:String类内部通过char数组来保存字符串,而这个char数组被声明为:final。那么为什么要将String类声明为不可变呢?了解设计模式的你应该知道有一种模式叫做“不变模式”(immutable pattern),String类的设计就是使用了不变模式,有兴趣的朋友可以看看“不变模式”讲的具体是啥东东。
要深入理解String必须先了解Java内存机制,
说明String对象存储机制之前,我们需要先了解数据区的三个部分:Java 虚拟机栈(可以简称为Java栈)、堆和运行时常量池(简称常量池)。对于Java栈和堆大家应该比较熟悉,这里有一个关键点是常量池,下面就重点介绍一下与String相关的常量池。
首先大概描述一下什么是常量池:
虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用常量的一个有序集合,包括直接常量(string,integer和floating point常量)和对其他类型、字段和方法的符号引用。池中的数据项就像数组一样是通过索引访问的。因为常量池存储了相应类型所用到的所有类型、字段和方法的符号引用,所以它在Java程序的动态链接中起着核心的作用。请看这样两个语句:
String x = "abc"; String y = new String("abcd");
现在来分析一下内存的分配情况。如图:
可以看出,x与y存在栈中,它们保存了相应对象的引用。第一条语句没有在堆中分配内存,而是将“abc”保存在常量池中。对于第二条语句,同样会在常量池中有一个“abcd”的字符串,当new时,会拷贝一份该字符串存放到堆中,于是y指向了堆中的那个“abcd”字符串。
0 0
- 深入理解java String
- String 深入理解
- 深入理解string
- 深入理解string
- 深入理解String
- 深入理解String类
- 深入理解Java:String
- 深入理解Java:String
- 深入理解Java:String
- 深入理解Java:String
- String深入理解
- java String深入理解
- 深入理解 String AOP
- 深入理解Java:String
- 深入理解java String
- 深入理解java String
- 深入理解Java String
- 深入理解Java:String
- Photoshop入门学习
- hdu 4886 hash+暴力
- myeclipse使用jquery-easyui
- Theano的安装及GPU的配置
- 获取AWS所拥有的公网IP列表
- 深入理解String
- 堆空间的开辟与释放
- access数据库的两种驱动方式
- 1088. Rational Arithmetic (20)
- NYOJ 5 Binary String Matching (KMP)
- ListView优化,获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- String转Date 转时间戳
- 使用指针遍历二维数组
- adb server is out of date.kill...