Java String 类

String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。

String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作;Java语言为“+”连接符(字符串连接符)以及对象转换为字符串提供了特殊的支持,字符串对象可以使用“+”连接其他对象。

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

String 中常用的方法

charAt(int index) 取字符串中的某一个字符,其中的参数index指的是字符串中序数,字符串的序数从0开始到length()-1
compareTo(String a) 当前String对象与A比较。相等关系返回0,不相等时,从两个字符串第0个字符开始比较,返回第一个不相等字符差,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差。
concat(String str) 将该String对象与str连接在一起
copyValueOf(char[] date,int offset,int count) 两个方法将char数组转换成String与其中一个构造函数类似
endsWith(String suffix) 该String对象是否以suffix结尾
getBytes() 将Sting对象转换成byte数组.
getChars(int a,int b,char[] dst,int c) 将字符串拷贝到字符串数组中。其中a为拷贝的起始位置、b为拷贝的结束位置、字符串数值dst为目标字符数组、c为目标字符数组的拷贝起始位置。
indexOf(int ch) 找第一个匹配字符位置
length() 当前字符串的长度
replace(char oldchar, char newchar) 将字符串中第一个oldchar替换成newchar。
subString(int beginindex) 取从beginindex位置开始到结束的子字符串
toCharArray() 该String对象转换成char数组
toLowerCase() 将字符串转换成小写
toUpperCase() 将字符串转换成大写

创建字符串对象两种方式的区别

直接赋值方式创建对象

直接赋值方式创建对象是在方法区的常量池

String str="hello";//直接赋值的方式

通过构造方法创建字符串对象

通过构造方法创建字符串对象是在堆内存

String str=new String("hello");//实例化的方式

String 为什么不可变

String 类源码中有一个char数组,并且这个 char 数组是被final修饰的。因为数组一旦创建长度不可变。并且被final修饰的引用一旦指向某个对象之后,不可在指向其它对象,所以String是不可变的!

源码开头如下:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

引用:面试题:String为什么不可变?StringBuffer/StringBuilder为什么是可变的?

三种有关字符串的类

java.lang.String:一般作为简单字符串类型

java.lang.StringBuffer:字符串缓冲区

java.lang.StringBuider:字符串缓存区

StringBuffer 字符串缓冲类

在实际应用中,经常会遇到对字符串进行动态修改。这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加、插入和替换等操作
对StringBuffer的修改,是直接的,不会创建多余的对象

1、这三个类的区别有两个方法,运行速度和线程安全。

  首先说运行速度也就是执行速度,在这方面的快慢为 StringBuilder > StringBuffer >String.

 String 最慢的原因是:String 为字符串的常量而 StringBuilder 和 StringBuffer 是字符串的变量,String 一旦创建之后是不可更改的,而 StringBuilder 和 StringBuffer 是变量是可以更改的。

Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

参考:Java常用类(二)String类详解

相关推荐阅读:

发表评论