编程基础认知,Java字符型常量详解_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 编程基础认知,Java字符型常量详解

编程基础认知,Java字符型常量详解

更新时间:2020-06-18 14:23:50 来源:极悦 浏览1947次

在Java程序中经常会遇到类似于"Hello"这样地字符串,那么这种类型的字符串是Java中是如何存储,下面就来讨论一下字符串常量在内存中的存储方式

Java程序在编译时会将程序中出现的常量(包括:char、byte、short、int、long、boolean和String类型)放到一个叫做常量池的地方。常量池也称为对象池,顾名思义常量池中存储的是对象。

那么在源程序中检测到"Hello"这样地常量字符串之后,编译器都干了些什么:

首先,在常量池中创建一个String对象,该对象的内存分布如下图:

编程基础认知,Java字符型常量详解

这里就需要提一下String定义的两个变量:

private final char value[];//The value is used for character storage
private int hash;//Cache the hash code for the string

其中第一个就是实际存储字符串的数组,所有字符串最终的存储形式都是字符数组。从上图中可以很清晰的看出,实际的字符数组还是存储在堆中,常量池中存储的是String对象。

当执行String str="Hello",只是将常量池中"Hello"对象的地址赋给了str。

除了上面这个字符串常量的内存模型需要理清之外,String类还有几个很常用的构造函数,也需要对内存模型非常熟悉:

public String(){
this.value="".value;
}

这是默认的构造函数,它将一个空串的字符数组引用赋给了本类的数组数组引用,所以这个String对象中什么也没有当然这样做并没有什么好处,因为String对象一但创建便不可更改其内容(从value的修饰关键字final可以看出)。

public String(String original){
this.value=original.value;
this.hash=original.value;
}

这里只是简单的复制了引用的值,并没有复制引用的内容,它们仍然指向同一个对象。

public String(char value[]){
this.value=Arrays.copyOf(value,value.length);
}

Array.copyOf()会将value中的值重新拷贝一份出来,所以this.value和参数中的value完全是两个对象,只不过它们的值相同而已

其余的构造函数也基本类似,大家可自行分析

编程基础认知,Java字符型常量详解

Java技术相关内容

Java字符串类型:

以上就是极悦java培训机构的小编针对“编程基础认知,Java字符型常量详解”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>