0x00:API概述

API (Application Programming Interface): 应用程序接口
Java API: 指的就是JDK中提供的各种功能的Java类 , 这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习如何使用即可,我们可以通过帮助文档来学习这些API如何使用。

  1. package Test;
  2. import java.util.Scanner;
  3. public class ScannerDemo {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. System.out.println("请输入一个字符串数据:");
  7. String line = sc.nextLine();
  8. System.out.println(line);
  9. }
  10. }

0x01:String概述

String 类 在 Java.lang 包下,所以使用的时候不需要导包。
String 类代表字符串, Java 程序中的所有字符串文字(例如abc)都被实现为此类的实例,也就是说 Java 程序中所有双引号的字符串,都是String 类的对象

0x03:字符串的特点:

①: 字符串不可变,他们的值在创建后不能被更改
②: 虽然String的值是不可变的,但是它们可以被共享
③:字符串效果相当于字符数组(char[]),但是底层原理是字节数组(Byte[])
JDK 8 及以前是字符数组, JDK 9 及以后是字节数组

0x04:String 构造方法

方法名 说明
public String() 创建一个空白字符串对象, 不含有任何内容
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] bys) 根据字节数组的内容,来创建字符串对象
String s = “abc”; 直接复制的方式创建字符串对象,内容就是 abc
  1. package Test;
  2. public class StringDemo {
  3. public static void main(String[] args) {
  4. // public String(); 创建一个空白字符串对象,不含任何内容
  5. String s1 = new String();
  6. System.out.println("s1:"+s1);
  7. System.out.println("-----");
  8. //public String(char[] chs); 根据字符数组的内容,来创建字符串对象
  9. char[] chs ={'a','b','c'};
  10. String s2 = new String(chs);
  11. System.out.println("s2:"+s2);
  12. System.out.println("------");
  13. //public String(byte[] bys); 根据字节数组的内容,来创建字符串对象
  14. byte[] bys = {97,98,99};
  15. String s3 = new String(bys);
  16. System.out.println("s3:"+s3);
  17. //直接赋值的方式
  18. String s4 = "abc";
  19. System.out.println(s4);
  20. }
  21. }

image.png

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

  1. char[] chs ={'a','b','c'};
  2. String s1 = new String(chs);
  3. String s2 = new String(chs);

上面的代码中 , JVM 会首先创建一个字符数组,然后每一次 new的时候都会有一个新的地址,只不过 s1 和s2参考的字符串内容是相同的

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

  1. String s1 = "abc";
  2. String s2 = "abc";

上面的代码中 , JVM 会首先创建一个String对象放在字符串池中,并给 s1 参考,第二行则让 s2 直接参考字符串池中的String对象。

0x05:字符串的比较

使用 == 作比较
①: 基本类型: 比较的是数据值是否相同
②: 引用类型: 比较的是地址值是否相同

字符串是对象, 它比较内容是否相同,是通过一个方法实现的,这个方法叫: equals()

  • public boolean equals(Objection anObject) : 将此字符串与指定对象进行比较。 由于我们比较的是字符串对象,所以参数直接传递一个字符串。 ```java package Test;

public class StringDemo { public static void main(String[] args) {

  1. //public String(char[] chs); 根据字符数组的内容,来创建字符串对象
  2. char[] chs ={'a','b','c'};
  3. String s1 = new String(chs);
  4. String s2 = new String(chs);
  5. String s3 = "abc";
  6. String s4 = "abc";
  7. // 比较字符串对象地址是否相同
  8. System.out.println(s1 == s2);
  9. System.out.println("-----");
  10. System.out.println(s1 == s3);
  11. System.out.println("-----");
  12. System.out.println(s3 == s4);
  13. System.out.println("-----");
  14. // 比较字符串内容是否相同
  15. System.out.println(s1.equals(s2));
  16. System.out.println("-----");
  17. System.out.println(s1.equals(s3));
  18. System.out.println("-----");
  19. System.out.println(s3.equals(s4));
  20. }

}

  1. <a name="XqHnQ"></a>
  2. ##
  3. <a name="b8NoO"></a>
  4. ## 0x06:字符串的长度和取字符串的值
  5. ```java
  6. 字符串.length 获取字符串的长度
  7. 字符串.charAt(i),其中 i 是索引, 从0开始到字符串的最后一位
  1. package Test;
  2. import java.util.Scanner;
  3. public class StringDemo {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. System.out.println("请输入一个字符串");
  7. String line = sc.nextLine(); // netLine 输入的类型是字符串
  8. for(int i =0; i<line.length();i++){
  9. System.out.println(line.charAt(i));
  10. }
  11. }
  12. }