首页 > 常见问答

string是什么意思(string函数的用法)


作者|平头哥的技术博文

责编|屠敏

出品|csdn博客

string是什么意思(string函数的用法)

string对象的实现

string对象是java中使用最频繁的对象之一,所以java公司也在不断的对string对象的实现进行优化,以便提升string对象的性能,看下面这张图,一起了解一下string对象的优化过程。

1.在java6以及之前的版本中

string对象是对char数组进行了封装实现的对百思特网象,主要有四个成员变量:char数组、偏移量offset、字符数量count、哈希值hash。

string对象是通过offset和count两个属性来定位char数组,获取字符串。这么做可以高效、快速地共享数组对象,同时节省内存空间,但这种方式很有可能会导致内存泄漏。

2.从java7版本开始到java8版本

从java7版本开始,java对string类做了一些改变。string类中不再有offset和count两个变量了。这样的好处是string对象占用的内存稍微少了些,同时string.substring方法也不再共享char,从而解决了使用该方法可能导致的内存泄漏问题。

3.从java9版本开始

将char数组改为了byte数组,为什么需要这样做呢?我们知道char是两个字节,如果用来存一个字节的字符有点浪费,为了节约空间,java公司就改成了一个字节的byte来存储字符串。这样在存储一个字节的百思特网字符是就避免了浪费。

在java9维护了一个新的属性coder,它是编码格式的标识,在计算字符串长度或者调用indexof函数时,需要根据这个字段,判断如何计算字符串长度。coder属性默认有0和1两个值,0代表latin-1(单字节编码),1代表utf-16编码。如果string判断字符串只包含了latin-1,则coder属性值为0,反之则为1。

string对象的创建方式

1、通过字符串常量的方式

stringstr="pingtouge"的形式,使用这种形式创建字符串时,jvm会在字符串常量池中先检查是否存在该对象,如果存在,返回该对象的引用地址,如果不存在,则在字符串常量池中创建该字符串对象并且返回引用。使用这种方式创建的好处是:避免了相同值的字符串重复创建,节约了内存。

2、string构造函数的方式

stringstr=newstring("pingtouge")的形式,使用这种方式创建字符串对象过程就比较复杂,分成两个阶段,首先在编译时,字符串pingtouge会被加入到常量结构中,类加载时候就会在常量池中创建该字符串。然后就是在调用new时,jvm将会调用string的构百思特网造函数,同时引用常量池中的pingtouge字符串,在堆内存中创建一个string对象并且返回堆中的引用地址。

了解了string对象两种创建方式,我们来分析一下下面这段代码,加深我们对这两种方式的理解,下面这段代码片中,str是否等于str1呢?

stringstr="pingtouge";stringstr1=newstring("pingtouge");system.out.println(str==str1)

我们逐一来分析这几行代码,首先从stringstr="pingtouge"开始,这里使用了字符串常量的方式创建字符串对象,在创建pingtouge字符串对象时,jvm会去常量池中查找是否存在该字符串,这里的答案肯定是没有的,所以jvm将会在常量池中创建该字符串对象并且返回对象的地址引用,所以str指向的是pingtouge字符串对象在常量池中的地址引用。

然后是stringstr1=newstring("pingtouge")这行代码,这里使用的是构造函数的方式创建字符串对象,根据我们上面对构造函数方式创建字符串对象的理解,str1得到的应该是堆中pingtouge字符串的引用地址。由于str指向的是pingtouge字符串对象在常量池中的地址引用而str1指向的是堆中pingtouge字符串的引用地址,所以str肯定不等于str1。

string对象的不可变性

从我们知道string对象的那一刻起,我想大家都知道了string对象是不可变的。那它不可变是怎么做到的呢?java这么做能带来哪些好处?我们一起来简单的探讨一下,先来看看string对象的一段源码:

publicfinalclassstringimplementsjava.io.serializable,comparable本文地址:http:///post/24107.html

原文标题:string是什么意思(string函数的用法),如若转载,请注明出处:https://www.saibowen.com/wenda/10486.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「赛伯温」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。