首页 > 编程知识 正文

java中string和stringbuffer,java字符串数组操作方法

时间:2023-05-04 16:07:08 阅读:283100 作者:2052

十月轻暖,依旧在java路上漫步前行

这次就围绕以下几个问题吧,分享我浅薄的经验,希望对诸君有所帮助

1.JDK中String与StringBuffer,StringBuilder的常用API

所谓API就是(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

常用方法在javaAPI文档里就可以详细的看到。以String类为例:
常用方法有:




API中对每个方法也有较为系统详细的介绍,建议大家看看!下载网址为
http://www.oracle.com/technetwork/java/javase/downloads/index.html,这也是下载JDK的网址。

2.String,StringBuffer,StringBuilder三者之间的共同点和区别
共同点:
(1)三者都是用来字符串序列的类,最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都是AbstractStringBuilder的子类。
(2)内部实现基于字符数组,封装了对字符串处理的各种操作。
(3)可自动检测数组越界等运行时异常

不同点:(1)可变性与不可变性:虽然三者参数都是引用传递,但String内部实现基于常量字符数组,其内容不可变;虽然我们可能会看到这样的式子:

String s=“a”;s=s+”b“;输出的结果是ab
看起来像是s指向的对象的值改变了,但其实s已经指向了一个新的对象。

而StringBuffer和StringBuilder内部实现基于普通字符数组,数组大小可根据字符串的实际长度自动扩容,其内容可变。可以直接改变所指向对象的值,不用产生新的对象。

这里多说一下,为什么String类被设计成不可变性,主要是兼顾效率和安全
(1)字符串常量池的需要
(2)保证String哈希码的唯一性,可缓存
前两个主要基于效率
(3)String多线程安全
(4)String常常做参数传递(网络,数据库,安全性)

(2)性能方面,对于字符串的处理
相对而言是StringBuilder>StringBuffer > String

(3)StringBuffer线程安全,StringBuilder非线程安全

3.为什么不建议在for循环中使用“+”进行字符串拼接?
在程序编写的过程中,我们经常需要进行字符串拼接这一个操作。
最简单常用的就是用“+”号来进行字符串的拼接。
注意的是:java中“+”号并不是运算符重载,Java中也没有运算符重载。 “+”号在java中是算术运算符之外,也是字符串拼接符。但是C/C++中则需要重载。

为什么循环中不推荐使用“+”运算符呢?
主要是易造成内存资源的浪费。下面是一个例子:

*程序中循环体会不断产生新的对象,加上新的字符串后通过toString返回,就会造成内存资源的浪费。

循环内部一般使用StringBuilder中的append方法来进行字符串的扩展。

4.字符串的编码和解码
将unicode字符集转化为本地字符集(如GB2312或者GBK)的过程叫编码,反之叫解码。
简单来说把 字符 转化为码值的就叫编码,把码值转化为字符就叫解码。 就比如说我们熟悉的abcd等字母,各种字符,就有对应的ASCII码值对应。

就拿汉字来说,在储存的时候需要转化为码值,这时候就需要编码,使其变成规定GB2312或者Unicode对应的代码,而当我们需要查看的时候,看的肯定不是其码值,这时就需要将码值破解使其转化为汉字,这就是解码。

同一个汉子,在不同的码表里对应的码值也是不一样的。

常见的码表就有ASCII,ISO8859-1,GB2312,GBK,unicode,UTF-8.

若有错误,欢迎大家留言指正,相互进步!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。