0x00:API概述
API (Application Programming Interface): 应用程序接口
Java API: 指的就是JDK中提供的各种功能的Java类 , 这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
package Test;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串数据:");
String line = sc.nextLine();
System.out.println(line);
}
}
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 |
package Test;
public class StringDemo {
public static void main(String[] args) {
// public String(); 创建一个空白字符串对象,不含任何内容
String s1 = new String();
System.out.println("s1:"+s1);
System.out.println("-----");
//public String(char[] chs); 根据字符数组的内容,来创建字符串对象
char[] chs ={'a','b','c'};
String s2 = new String(chs);
System.out.println("s2:"+s2);
System.out.println("------");
//public String(byte[] bys); 根据字节数组的内容,来创建字符串对象
byte[] bys = {97,98,99};
String s3 = new String(bys);
System.out.println("s3:"+s3);
//直接赋值的方式
String s4 = "abc";
System.out.println(s4);
}
}
String 对象的特点
①:通过 new 创建的字符串对象,每一次new都会申请一个内存空间,虽然内存相同,但是地址值不同。
char[] chs ={'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
上面的代码中 , JVM 会首先创建一个字符数组,然后每一次 new的时候都会有一个新的地址,只不过 s1 和s2参考的字符串内容是相同的
②:以 “”方式给出的字符串,只要字符序列相同(顺序和大写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。
String s1 = "abc";
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) {
//public String(char[] chs); 根据字符数组的内容,来创建字符串对象
char[] chs ={'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
String s3 = "abc";
String s4 = "abc";
// 比较字符串对象地址是否相同
System.out.println(s1 == s2);
System.out.println("-----");
System.out.println(s1 == s3);
System.out.println("-----");
System.out.println(s3 == s4);
System.out.println("-----");
// 比较字符串内容是否相同
System.out.println(s1.equals(s2));
System.out.println("-----");
System.out.println(s1.equals(s3));
System.out.println("-----");
System.out.println(s3.equals(s4));
}
}
<a name="XqHnQ"></a>
##
<a name="b8NoO"></a>
## 0x06:字符串的长度和取字符串的值
```java
字符串.length 获取字符串的长度
字符串.charAt(i),其中 i 是索引, 从0开始到字符串的最后一位
package Test;
import java.util.Scanner;
public class StringDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String line = sc.nextLine(); // netLine 输入的类型是字符串
for(int i =0; i<line.length();i++){
System.out.println(line.charAt(i));
}
}
}