Java —— String

概述

  1.  Java程序中,所有的双引号字符串,都是String这个类的对象。
  2. String类在Java.lang包下,所以使用的时候是不需要导包的。
  3. 字符串不可变,它们的值在创建之后不可被更改。

常见的构造方法

public String()   // 创建一个空白字符串对象,不含有任何内容

public String(char[] chs)   // 根据字符数组的内容,来创建字符串对象

public String(String original)   // 根据传入字符串的内容,来创建字符串对象

String s = "abc"   // 直接赋值的方法来创建字符串对象,内容就是abc

 

常见的成员方法 

length()

获取字符串的长度,常用于遍历字符串。

String str = "hello world";
System.out.println("str.length() = " + str.length());   // str.length() = 11

 

charAt()

返回指定索引处的char值,字符串的索引也是从0开始的,常用于遍历字符串。使用方式如下

String str = "hello world";
System.out.println(str.charAt(1));   // e

  

toCharArray()

将当前字符串拆分为字符数组并返回,常用于遍历字符串。使用方式如下

String str = "hello world";
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
    System.out.print(chars[i] + "\t");   // h	e	l	l	o	 	w	o	r	l	d
}

  

substring()

字符串的截取,它有俩种使用方式,分别是传入一个参数和俩个参数,使用方式分别如下:

1、传入一个参数,就是从传入的索引处开始向后截取,一直截取到末尾,得到新的字符串并返回。

String str = "hello world";
String newStr2 = str.substring(6);
System.out.println(newStr2);   // world

2、传入俩个参数,第一个参数就代表开始截取的位置索引,第二个参数代表结束索引的位置。使用方式如下:

String str = "hello world";
String str2 = str.substring(1, 4);
System.out.println(str2);   // ell 

replace

将当前字符串中的部分内容使用新值进行替换,返回替换完成后的新字符串。它传入2个参数,第一个参数为即将要替换的内容,第二个参数为即将使用的字符串新值,使用方式如下

String str = "hello world";
String newString = str.replace("hello", "hi");
System.out.println(newString);   // hi world

这个方法是全部替换,也就是字符串中有多个所匹配的,也一并替换掉,如下

String str = "hello world, hello world";
String newString = str.replace("hello", "hi");
System.out.println(newString);   // hi world, hi world

split

根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回。使用方式如下

String str = "张三, 27";
String[] arr = str.split(",");
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);   // 张三
                                  // 27
}

  

equals()和equalsIgnoreCase()

==号在做比较的时候,如果是基本数据类型之间的比较,比较的是具体的值,比较引用类型的值的时候,比较的是地址值。

因为字符串是对象,如果需要它比较内容是否相同。可以通过一个方法来实现,这个方式就是——equals,使用方式如下:

String str1 = "abc";
String str2 = new String("abc");
boolean result = str1.equals(str2);
System.out.println(str1 == str2);   // false
System.out.println(result);   // true

如果想忽略大小写的进行比较,可以使用equalsIgnoreCase()进行比较,使用方法如下:

String str1 = "abc";
String str2 = new String("ABC");
boolean result = str1.equalsIgnoreCase(str2);
System.out.println(result);   // true

  

一些注意点

创建字符串对象的区别对比

以" "方式给出的字符串,只要字符序列(顺序和大小写)相同,无论在程序代码中出现几次,JVM都只会创建一个String对象,并在字符串常量池中维护。

String str1 = "abc";
String str2 = "abc";

当使用" "创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在,如果不存在,就创建,如果存在,就不会重现创建,而是直接复用。

通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。

String str3 = new String("abc");
String str4 = new String("abc");

 

关于不能更改

字符串是常量,它们的值在创建之后不能更改。

String str = "abc";
str = "def";
System.out.println("str = " + str);   // str = def

上面str字符串对象看似内容被更改了,其实并没有,只是str变量指向了另一个字符串对象实例。

 

关于打印

string这个类比较特殊,打印其对象名的时候,不会出现内存地址,而是该对象所记录的真实内容。

 

常见面试题

String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);   // true

 

String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1 == str2);   // false

 

String str1 = "abc";
String str2 = "ab";
String str3 = str2 + "c";
System.out.println(str1 == str3);   // false

// 分析:当字符串之间使用 + 号串联(拼接)的时候,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接。拼接后,再调用其toString方法转换为String类型。

 

String str1 = "abc";
String str2 = "a" + "b" + "c";
System.out.println(str1 == str2);   // true

// 分析:Java存在常量优先机制,在编译的时候,就会将"a" + "b" + "c"拼接为"abc"

  

  

  

  

posted @ 2021-04-25 11:01  徐林俊  阅读(105)  评论(0编辑  收藏  举报