字符串就是一系列字符的序列。在Java语言中字符串是用一对双引号("")括起来的字符序列,在前几章的例子中已多次用到,如“你好”、"Hello"等。字符串也是编程中经常要使用的数据结构,从某种程度上说字符串有些类似于字符数组。在Java语言中无论是字符串常量还是字符串变量,都是用类来实现的。程序中用到的字符串可以分为两大类:一类是创建之后不会再做修改和变动的字符串变量;另一类是创建之后允许再做修改的字符串变量。对于前一种字符串变量,由于程序中经常需要对它做比较、搜索之类的操作,所以通常把它放在一个具有一定名称的对象之中,由程序完成对该对象的上述操作,在Java程序中存放这种字符串的变量是String类对象;对于后一种字符串变量,由于程序中经常需要对它做添加、插入、修改之类的操作,所以这种字符串变量一般都存放在StringBuilder类的对象之中。本文只讨论String类型的串变量。
1.字符串变量的创建
首先再强调一下字符串常量与字符常量的不同,字符常量是用单引号(')括起来的单个字符,而字符串常量是用双引号(")括起来的字符序列。声明字符串变量的格式与其他变量一样,分为对象的声明与对象创建两步,这两步可以分成两个独立的语句,也可以在一个语句中完成。
格式一:
String变量名;
变量名=new String("字符串");
如:
String s; //声明字符串型引用变量s,此时s的值为null
s=new String("Hello"); //在堆内存中分配空间,并将s指向该字符串首地址
第一个语句只声明了字符串引用变量s,此时s的值为null;第二个语句则在堆内存中分配了内存空间,并将s指向了字符串的首地址。
上述的两个语句也可以合并成一个语句。其格式如下。
格式二:
String变量名=new String(“字符串”);
如:
String s=new String("Hello");
还有一种非常特殊而常用的创建String对象的方法,这种方法就是直接利用双引号括起来的字符串为新建的String对象赋值,即在声明字符串变量时直接初始化。
格式三:
String变量名="字符串";
如:
String s="Hello";
由于字符串是引用型变量,所以其存储方式与数组的存储方式基本相同。
程序中可以用赋值运算符为字符串变量赋值,除此之外,Java语言定义“+”运算符可用于两个字符串的连接操作(关于字符串的运算符在3.7.7中已讲述过)。例如:
str="Hello"+"Java"; //str的值为"HelloJava"
如果字符串与其他类型的变量进行“+”运算,系统自动将其他类型的数据转换为字符串型。例如:
int i=10;
String s="i="+i; //s的值为"i=10"
前面说过,利用String类创建的字符串变量,一旦被初始化或赋值,它的值和所分配的内存内容就不可再改变。如果硬要改变它的值,它会产生一个新的字符串。例如:
String str1="Java";
str1=str1+"Good";
这看起来像是一个简单的字符串重新赋值,实际上在程序的解释过程中却不是这样的。程序首先产生str1的一个字符串对象并在内存中申请了一段空间,由于发现又需要重新赋值,在原来的空间已经不可能再追加新的内容,系统不得不将这个对象放弃,再重新生成第二个新的对象str1并重新申请一个新的内存空间。虽然str1指向的内存地址(句柄)是同一个,但对象已经不再是同一个了。
2.String类的常用方法
Java语言为String类定义了许多方法。可以通过下述格式调用Java语言定义的方法:
字符串变量名.方法名();