String类
java.lang.Object
java.lang.String java.lang包下,不需要导包就可以使用
"abc" 可以看做 字串符对象
String s = "abc" abc 是一个对象 字符串是一个常量,一旦被赋值就不能被改变
s = "cde" //原来的"abc"对象变成垃圾了
常见构造方法:
* A:常见构造方法 * public String():空构造
String s1 = new String(); * public String(byte[] bytes):把字节数组转成字符串
byte[] arr1 = {97,98,99};
String s2 = new String(arr1); // 输出 abc * public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串 * public String(char[] value):把字符数组转成字符串
char[] arr3 = {'a','b','c','d','e'};
String s4 = new String(arr3);
System.out.println(s4); //输出abcde * public String(char[] value,int index,int count):把字符数组的一部分转成字符串 * public String(String original):把字符串常量值转成字符串
*/
关注点:
public static void demo1() { String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); // true // 常量池 没有这个字符串 就创建一个 如果有就直接用 所以s1 和 s2 地址值是同一个 指向常量池的地址 System.out.println(s1.equals(s2)); // true } public static void demon2() { String s1 = new String("abc"); // 创建了2个对象 } // 先在常量池里 创建一个"abc" 对象,再在堆里创建一个 指向常量池里的 "abc" public static void demo3() { String s1 = new String("abc"); // 记得是 堆内存的地址值 常量池的副本 String s2 = "abc"; // 记录的是 常量池的地址值 System.out.println(s1 == s2); //false System.out.println(s1.equals(s2)); //true } public static void demo3() { String s1 = new String("abc"); // 记得是 堆内存的地址值 常量池的副本 String s2 = "abc"; // 记录的是 常量池的地址值 System.out.println(s1 == s2); //false System.out.println(s1.equals(s2)); //true } public static void demo4() { String s1 = "a" + "b" + "c"; String s2 = "abc"; System.out.println(s1 == s2); // true // java有常量优化机制 System.out.println(s1.equals(s2)); // true } public static void demon5() { String s1 = "ab"; String s2 = "abc"; String s3 = s1 + "c"; System.out.println(s3 == s2); // false // s3是变量 不是常量 System.out.println(s3.equals(s2)); } // 加号 + 拼接字符串 :底层是通过StringBuilder 或StringBuffer实现的 // s3= s1 + "c" : 先是一个StringBuilder 对象 "ab" ,通过append() 方法 拼接上"c", 变成"abc" ,再用toString() 转成字符串对象"abc"将地址值 赋给s3
String类的判断功能
public static void main(String[] args) { //demo1(); String 类重写了equals()方法 String s1 = "woaini"; String s2 = "ni"; String s3 = null; // null 是空常量 可以給任意引用类型赋值,""不行 String s4 = ""; System.out.println(s1.contains(s2)); // 是否包含 System.out.println(s1.startsWith("h")); System.out.println(s1.endsWith("a")); System.out.println(s3.isEmpty());// null 是空常量 不能调用任何方法 否则报空指针异常 System.out.println(s4.isEmpty());// ""是空字符串 ,也是字符串的一种,只能给字符串赋值 }
竹杖芒鞋轻胜马,一蓑烟雨任平生。
回首向来萧瑟处,也无风雨也无晴。