一、String
1.1 是什么
String字符串类,底层就是一个字符数组,所以字符串很多特性就是数组的特征
1 字符串一旦创建,不能修改
2 为了提高字符串的访问效率,Java提供了一种缓存技术,字符串常量池
3 如果是用=" " 就不会再堆内存创建对象,而是直接再常量池进行搜索,如果有就直接使用,没有就创建
4 如果new String(“”) 会在堆内存创建字符串对象,并且常量池中如果没有,也会创建
https://blog.51cto.com/u_16213597/8705883
1.2 基本使用
String s1 = "ab";
String s2 = "ab";
System.out.println(s1 == s2);
// 以上程序只会在常量池中创建一个ab对象,并且s1和s2都指向ab
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
// 堆内存两个,常量池一个,s3和s4分别指向不同的堆内存
String s5 = new String("zxc");
// intern : 在字符串常量池中查询,是否存在当前字符串,如果不存在就把字符串放进去
s5.intern();
String s6 = "zxc";
// false , 因为new 存放在堆内存,s6指向的zxc 是常量池
// s5.intern(); 把s5放进常量池的时候,发现已经有了,所以并不会把s5放进去
System.out.println(s5 == s6);
String s7 = new String("a") + new String("a") ;
// a会被放在常量池中一份,堆内存中也有,但是拼接的aa 会在堆内存存储,但是不会在常量池中
// 因此 s7.intern() 的时候,会把s7放到常量池中一份
s7.intern();
// s8="aa" 发现常量池中已经有s7了("aa") 则 直接指向,不再创建
String s8 = "aa";
// 因此s7和s8的地址相同
System.out.println(s7 == s8);
System.out.println(s7.equals(s8));
1.3 构造方法
1.4 常用方法
// 1 char charAt(int index) : 获取字符串中指定下标的字符
String s1 = "ashjbdkfq";
char c1 = s1.charAt(3);
System.out.println(c1);
// 2 boolean endsWith(String suffix) : 判断某个字符串是否已指定字符串结尾
// boolean startsWith(String prefix) : 判断某个字符串是否已指定字符串开头
System.out.println("asdasd".endsWith("sd"));
// 3 boolean equals(Object obj) : 判断是否相等
// boolean equalsIgnoreCase(String str) : 不区分大小写比较是否相等
System.out.println("ASDDSAasddsa".equalsIgnoreCase("asddsaAsdDsa"));
// 4 int indexOf(String str) : 获取指定字符串的起始索引,不存在返回-1(第一次出现的位置)
System.out.println("ndsajkfnqwga".indexOf("aj"));
// 5 int indexOf(String str,int fromIndex) : 获取指定字符串的起始索引,不存在返回-1(从指定位置开始向后找)
System.out.println("ndsajafnqawga".indexOf("a",5));
// 6 int lastIndexOf(String str) : 获取指定字符串的结束索引,不存在返回-1(最后一次出现的位置)
// 7 int lastIndexOf(String str,int formIndex)
// 8 int length() 字符串长度
System.out.println("asasdad".length());
// 9 String replace(String str,String replace) : 替换指定字符,返回新字符串
System.out.println("aca.vanbgdn.skca".replace(".", "="));
// replaceAll 替换,支持正则表达式 在正则表达式中 . 代表任意字符
System.out.println("aca.vanbgdn.skca".replaceAll(".", "="));
// 10 String[] split(String regex) : 以特定字符分割,得到字符串数组,支持正则表达式
String[] arr = "2024-8-5".split("-");
// 11 String substring(int begin) : 获取指定下标为起始的,子字符串(包含)
System.out.println("asbjvkabfa".substring(3));
// String substring(int beginIndex , int endIndex) :获取指定位置起始(包含) 到指定位置结束(不包含)的子字符串
System.out.println("asbjvkabfa".substring(3,6));
// 12 char[] toCharArray() : 把字符串转换为char数组
char[] chars = "asdasd".toCharArray();
// 13 String toUpperCase() 转大写
// String toLowerCase() 转小写
System.out.println("asdas".toUpperCase());
// 14 String trim() : 删除两边空格
System.out.println(" asd dsa ".trim());
1.5 注意事项
不要做频繁的字符串拼接操作
二、StringBuffer和StringBuilder
2.1 是什么
StringBuffer和StringBuilder是可以拼接的字符串
他们两个底层也是char数组,只不过该数组会进行自动扩容
默认长度为16,扩大容量为2倍+2
StringBuilder非线程安全,多线程环境下可能出现问题
StringBuffer线程安全,多线程环境下,不会出现问题
2.2 使用
三、System
四、Date
4.1 构造方法
4.2 时间格式化
ystem
[外链图片转存中…(img-vBm0s4Of-1722840446769)]
四、Date
4.1 构造方法
[外链图片转存中…(img-QEAVx5ev-1722840446770)]