第四章 字符串(1.1)
字符(char
)类型是Java的基本数据类型之一,用来存储单个字符。在开发过程中,往往多个字符一起才能表达一个有意义的数据。Java提供了字符串(String
)类型,用来处理一连串的字符。字符串便是由若干字符组成的序列。
1.1、字符串的声明和初始化
语法格式:
String 变量名 = “初始值”
或者
String 变量名 = new string(“初始值”);
例子:
String str1 = "Hello world";
String str2 = new String("Hello World");
1.2、字符串的连接
使用的是“+
”运算符可以将字符串连接在一起,也可以将字符串与基本数据类相互连接在一起。
例:
Public class Text {
Public static void main(String[] args){
String str1 = “Hello”;
String str2 = “Java”;
String str3 = “Hello Java”;
String str4 = “Hello” + “Java”;
String str5 = str1 + str2;
Int num = 520;
String str6 = num + str2;
System.out.println(“str1 = ”+str1);
String.out.println(“str2 = ”+str2);
System.out.println(“str3 = ”+str3);
System.out.println(“str4 = ”+str4);
System.out.println(“str5 = ”+str5);
System.out.println(“str6 = ”+str6);
}
}
注意
:使用“+”运算符连接的字符串中间是没有空格的。
1.3、字符串的比较
1.3.1 关系运算符“==”
例:
Public class Text{
Public static void main(String[] args){
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println("(str1 == str2) = " + (str1 == str2));
System.out.println("(str1 == str3) = " + (str1 == str3));
System.out.println("str1.equals(str3) = " + str1.equals(str3));
}
}
解释:
- 用“
==
”操作符比较的是变量中存储的内容(数据或内存地址编号)。由于字符串是引用数据类型,如果str1 ==
str2的结果为true,意味着str1和str2两个变量中存储着同样的内存地址编号,即引用了同一块内存。 - String类型提供的equals()方法,是比较字符串的字面值是否相同.
- “str1 == str2”的值为true,因为str1和str2的内存地址编号相同,但是str3是又申请了一个新的内存地址,所以”str1 ==
str3”的值为false.
1.3.2 equals()方法
1.3.3 compareTo() 方法
Java String类Java String类
compareTo() 方法用于两种方式的比较:
- 字符串与对象进行比较。
- 按字典顺序比较两个字符串。
语法
int compareTo(Object o)
或
int compareTo(String anotherString)
参数
o -- 要比较的对象。
anotherString -- 要比较的字符串。
返回值
返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
如果参数字符串等于此字符串,则返回值 0;
如果此字符串小于字符串参数,则返回一个小于 0 的值;
如果此字符串大于字符串参数,则返回一个大于 0 的值。
说明:
如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。
如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。
实例
public class Test {
public static void main(String args[]) {
String str1 = "Strings";
String str2 = "Strings";
String str3 = "Strings123";
int result = str1.compareTo( str2 );
System.out.println(result);
result = str2.compareTo( str3 );
System.out.println(result);
result = str3.compareTo( str1 );
System.out.println(result);
}
}
以上程序执行结果为:
0
-3
3
1.4、字符串的存储
字符串是引用数据类型
,因此字符串存储在堆中(堆中的字符串池)。为了节省内存,执行每个字符串时都会先在字符串池中查找是否存在所定义的字符串,如果存在直接应用,如果不存在则会重新分配内存存储该字符串。
1:String str1 = "Hello";
2:String str2 = "Hello";
3:String str3 = new String("Hello");
执行程序1时会在字符串池中查找“Hello”是否存在,如果不存在则分配内存将字符串“Hello”进行存储;执行程序2时依然会在字符串池中查找“Hello”是否存在,由于“Hello”存在,则引用str1的内存地址编号,存储在栈当中;当执行程序3时,虽然在字符串池中存在字符串“Hello”,但由于又在字符串池中申请了一块新的内存,产生新的一个内存地编号,然后将新的编号存储在栈中。