package course.api.string; /** * @author WanJl * @version 1.0 * @title StringTest * @description java API-String 字符串 * @create 2026/7/27 */ public class StringTest { public static void main(String[] args) { //定义字符串变量 String s1="Hello"; String s2="Hello"; System.out.println(s1==s2); //? //我们说过。String类型并不属于基本数据类型 //而是Java类 引用数据类型 //还说过 引用数据类型要像使用,需要创建对象 // 类型 对象名 = new 类型(); // 但是字符串String为什么不需要? // 这个就是因为Java为字符串做的特殊的定义,字符串的变量存储的地方有两个: // |- 和其他的引用数据类型一样,通过构造方法创建对象,引用变量存在栈中,对象空间存在堆中。虽然内容相同,但地址值不同 // |- 是直接把字符串变量存在常量池中。只要字符序列相同(顺序和大小写)那么无论程序代码中出现几次,JVM(Java虚拟机)都只建立一个String对象,并在字符串常量池中进行维护。 //String s1="Hello"; 就是把字符串的值存在了常量池 String s4=new String("Hello"); String s5=new String("Hello"); System.out.println(s1==s4); System.out.println(s4==s5); /* String 常见的构造方法: public String(); 创建一个空白字符串对象,不含有任何内容 public String(char[] chs); 根据字符数组的内容,创建一个字符串对象 public String(String original); 根据传入的字符串内容,创建一个字符串对象 String s="abc"; 直接以赋值的方式创建字符串对象,值就是abc 注意: String这个类比较特殊,打印它的对象名的时候,不会出现内存地址, 而是该对象所记录的字符串内容 后面会说怎么实现的...Object == 比较的是什么? 基本数据类型 使用 == 比较的时候具体的值 引用数据类型 使用 == 比较的是对象的内存地址 String类型也是比较地址,只不过,使用直接赋值的方式的字符串对象,只要字符序列(顺序和大小写)相同,就都是同一个对象。 为了能够直接比较字符串的内容,String提供了一个方法equals()方法 比较两个字符串的内容是否相同,区分大小写 String s4=new String("Hello"); String s5=new String("Hello"); boolean b=s4.equals(s5); //返回一个boolean值 */ System.out.println(s4.equals(s5)); } }