JavaSE之常用API(前一部分)

一、String

1.1 是什么

String字符串类,底层就是一个字符数组,所以字符串很多特性就是数组的特征

1 字符串一旦创建,不能修改

2 为了提高字符串的访问效率,Java提供了一种缓存技术,字符串常量池

3 如果是用=" " 就不会再堆内存创建对象,而是直接再常量池进行搜索,如果有就直接使用,没有就创建

4 如果new String(“”) 会在堆内存创建字符串对象,并且常量池中如果没有,也会创建

image-20240805142000269

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 构造方法

image-20240805142512298

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 注意事项

不要做频繁的字符串拼接操作

image-20240805143227939

image-20240805143246082

二、StringBuffer和StringBuilder

2.1 是什么

StringBuffer和StringBuilder是可以拼接的字符串

他们两个底层也是char数组,只不过该数组会进行自动扩容

默认长度为16,扩大容量为2倍+2

StringBuilder非线程安全,多线程环境下可能出现问题

StringBuffer线程安全,多线程环境下,不会出现问题

2.2 使用

image-20240805143744943

三、System

image-20240805143835502

四、Date

4.1 构造方法

image-20240805144143263

4.2 时间格式化

ystem

[外链图片转存中…(img-vBm0s4Of-1722840446769)]

四、Date

4.1 构造方法

[外链图片转存中…(img-QEAVx5ev-1722840446770)]

4.2 时间格式化

image-20240805144208419

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值