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

String:
字符串不可变,他们的值在创建后不能被更改
虽然String的值是不可变的,但是他们可以被共享
字符串效果上相当于字符数组char[],但是底层原理是字节数组byte[]
String构造方法:
public String() 创建一个空白字符串对象,不含有任何内容
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] bys) 根据字节数组的内容,来创建字符串对象
String s="abc" 直接赋值的方法创建字符串对象,内容就是abc
推荐使用直接赋值的方法创建字符串

public class StringTest {
    public static void main(String[] args) {
        String s1 = new String();
        char[] ch2 = { 'a', 'b', 'c' };
        String s2 = new String(ch2);
        byte[] by2 = { (byte) 65, (byte) 66, (byte) 67 };
        String s3 = new String(by2);
        String s4 = "abc";
        System.out.println("s1:" + s1);
        System.out.println("s2:" + s2);
        System.out.println("s3:" + s3);
        System.out.println("s4:" + s4);
    }

}

输出结果:

s1:
s2:abc
s3:ABC
s4:abc

通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同
String s1=new String("abc");
String s2=new String("abc");
上面的代码中,JVM会首先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的

通过""方式穿件的字符串对象,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会简历一个String对象,并在字符串池中维护。
String s3="abc";
String s4="abc";
上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考;第二行则让s4直接参考字符串池中的String对象,也就是说他们本质上是同一个对象。

public class StringTest1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s1=new String("abc");
        String s2=new String("abc");
        String s3="abc";
        String s4="abc";
        if(s1==s2) {
            System.out.println("s1和s2是同一个对象");
        }else {
            System.out.println("s1和s2不是同一个对象");
        }
        if(s3==s4) {
            System.out.println("s3和s4是同一个对象");
        }else {
            System.out.println("s3和s4不是同一个对象");
        }
        if(s1==s3) {
            System.out.println("s1和s3是同一个对象");
        }else {
            System.out.println("s1和s3不是同一个对象");
        }
    }
}

 


输出结果:
s1和s2不是同一个对象
s3和s4是同一个对象
s1和s3不是同一个对象

用==做比较,如果比较的是基本数据类型,比较的是数据值是否相同。如果比较的是引用类型,比较的是地址值是否相同。用equals()方法比较两个字符串的内容是否相同,所以以上的s1,s2,s3,s4使用equals都是相同的。

String类的方法有charAt(),length()
如果字符串需要根据情况加长,虽然可以用String类不停地进行连接,但是每连接一下就会生成一个新的对象,这时候就要用到StringBuilder类。StringBuilder类的实例化方式是StringBuilder sb=new StringBuilder(); sb.append(); sb.reverse()
StringBuilder转化为String,sb.toString
String转化为StringBuilder,new StringBuilder("string")