java基础系列------String的不可变性、substring方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java基础系列------String的不可变性、substring方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1549字,纯文字阅读大概需要3分钟。
内容图文
![java基础系列------String的不可变性、substring方法](/upload/InfoBanner/zyjiaocheng/625/ac3d71f82be04ff79ced48292712781f.jpg)
系列开篇
这个系列主要是通过阅读外网上的java基础文章,来达到巩固基础、培养语感和熟悉单词的目的,巩固基础算是优先级最低的一个目的,之所以选择java基础的英文文章就是因为复杂的看不懂呀,只好拿基础的来练练手,希望这个系列完结之后,我至少可以无障碍阅读简单的外网技术文章。
这一部分讲到了一点点JVM内存划分的知识,提出了堆的概念。String在java中属于引用数据类型,是存放在堆中的。String声明的变量中存储的是堆中对象的引用。
当调用concat方法对其进行拼接时,实际上并非修改了堆中的字符串对象,而是新建了一个新的字符串对象,并且断开原来的引用,将新对象的引用赋给变量。
最终在总结中也再次提到了,当一个字符串对象创建后,是不可变的,String类的方法宁愿返回一个新的字符串对象也不愿意修改原对象。如果我们想获得一个可变的字符串,我们需要使用StringBuffer 或 StringBuilder。
substring方法做了什么?
这个方法将从第一个参数位置的下标开始,一直截取到第二个参数位置的下标-1这段长度的字符串。
在JDK6中,在堆中会有一个字符数组存储着字符串的值,字符串分为三个区域 :char value[], int offset, int count。
他们被用于存储真正的字符串内容,字符串的首位下标和字符串总长度。
当调用substring时,会创建一个新的string,变量的引用会指向新的字符串,但是,新的字符串的char value[]仍旧指向堆中旧的字符数组,这样做会导致性能问题,也就是有的时候,我们只需要长字符串的一部分,但是,依然需要维护着整个字符串在堆中的字符数组。
给出的解决方案是在调用结果后拼接空字符串(意思是强行让原字符数组无法满足需求,而不得不创建新字符数组?)。
在JDK7中这种情况得到了改善,当调用substring方法时,会在堆中创建一个新的字符数组,也就是说,我们不需要一直维护着原本的字符数组,当截取字符串后,会产生新的字符数组。
内容总结
以上是互联网集市为您收集整理的java基础系列------String的不可变性、substring方法全部内容,希望文章能够帮你解决java基础系列------String的不可变性、substring方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。