前言
本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获。本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获!
再言
字符串的分类在java.lang包中,定义了两个大类来表示字符串: String和 String Buffer(StringBuild)类,它封装了字符串的数据结构,并定义了许多方法来处理字符串。Java将字符串分为两类的目的是为了提高系统对字符串的处理效率:
1.在程序运行中值不会改变的字符串,用 String类来存储和维护;
如果能够确信程序中使用的字符串的值在运行过程中不会改变,应尽量使用 String类对象;
2.在程序运行中值会改变的字符串,也称为带字符缓冲区的字符串,用 StringBuffer(StringBuild)类来存储和维护。
如果使用的字符串值在程序运行过程中会改变,就要使用 StringBuffer(StringBuild)类个对象,这样可以提高程序的运行性能。
【注意】Java提供的 String和 StringBuffer(StringBuild)类都定义为 final,意思是不能用它们派生出子类,这样做的目的是为了对字符串的操作进行优化。
String
String类用于存储和维护值不变的字符串对象,String类的定义原型如下:
//String定义原型public final class java.lang.String extends java.lang.Object { }
我们可以清楚的看出来,String该类的父类是一个Object类,由final进行修饰,表明不能产生子类(如导言所说),并且是一种工具类(由public修饰)。
了解了String原型,还可以看一下String源码:
//String部分源码public final class String implements java.io.Serializable, Comparable, CharSequence{ /** The value is used for character storage. */ private final char value[]; /** The offset is the first index of the storage that is used. */ private final int offset; /** The count is the number of characters in the String. */ private final int count; /** Cache the hash code for the string */ private int hash; // Default to 0 /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L; ........}
从上面的源码中可以看出来几点:
1)String类是final类并且它的成员方法也都默认为final方法,意味着String类和其中的方法都不可以被继承。
注:在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。
2)上面列举出了String类中的部分成员属性,从上面可以看出String类其实是通过char数组来保存字符串的。也可以说char是String的根本属性。
创建String字符串
创建String字符串可以分为两种情况:
(1)使用 "" 引号创建字符串;
(2)使用new关键字创建字符串。
方法一
这个方法中使用""创建字符串比较的简单:String 变量名="你自己需要定义的值";
方法二
在这个方法中的创建方式就会有很多种——String和其他类一样,可以用new操作符,并且调用该类的构造函数创建这种类型的对象。String类的构造函数具有以下11种格式:
public String ()public String(String value)public String (char value[])public String(char value[], int offset, int count)public String(byte ascii[], int hibyte, int offset, int count)public String(byte ascii[], int hibyte)public string(byte bytes[], int offset, int length, String enc)public string(byte bytes[],String enc)public String(byte bytes [], int offset, int length)public String(byte bytes[])public String (StringBuffer buffer)
构造函数各个参数的含义可以自己参阅有关的手册,这里就对几个经常使用的构造函数进行解析:
public String ()
不带参数的构造函数,采用该构造函数创建一个不含字符的空对象。eg:String str=new String();
public String(String value)
采用参数value对象的值构造一起新的String对象。eg:
String str1="YYH"; String str2=new String("YYH"); System.out.println(str2); //显然str2对象的内容是“YYH” System.out.println(str1==str2); //显然是false,这是因为str1和str2不是同一个对象,尽管他们的内容相同。
public String (char value[])
采用一个字符数组作为参数,把这个字符数组的内容转换为字符串,并赋予新建的对象。eg:
char a[]={'Y','Y','H'}; //字符数组 String str=new String(a); //字符串str的内容是“YYH”
public String(char value[], int offset, int count)
从对字符数组value指定的起始字符下标offset开始,将字符个数为count的字符字串作为参数,创建一个新的String对象。eg:
char a[]={'Y','Y','H'}; //字符数组