Java个人学习之旅(第十天)

1. String类型的常用方法:

1. contains

  • 判断一个字符串是否包含某个字符串
  • 返回值类型为boolean
  • 参数类型为String

2. equals

  • 判断两个字符串是否相同
  • 返回值类型为boolean
  • 参数类型为String

3. charAt

  • 返回指定索引处的char值(从0开始)
  • 返回值类型:char
  • 参数类型:int

4. endsWith&&startsWith

  • 判断字符串是否以某个字符串结尾&&开头
  • 返回值类型:boolean
  • 参数类型:String

5. indexOf

  • 返回子字符串第一次出现的索引
  • 返回值类型:int
  • 参数类型:String,int(从指定索引处开始查询,可有可无)

6. trim

  • 消除字符串中的空格
  • 返回值类型:String

7. isEmpty

  • 判断字符串是否为空
  • 返回值类型:boolean

8. replace

  • 使用某字符串代替源字符串中的子字符串
  • 参数类型:char

9. split

  • 以字符串中的某个符号分割该字符串
  • 返回值类型:String[]
  • 参数类型:String(行使分隔的字符串元素,或正则表达式)

10. toCharArray

  • 将字符串装转换为字符数组
  • 返回值类型:char[]
  • 参数类型:String

11. toUpperCase&&toLowerCase

  • 将字符串转换为全大写&&全小写
  • 返回值类型:String

12. intern

  • 返回字符串对象的规范表示,也就是如果字符串常量池中已经创建有了该字符串的地址,则直接返回该地址值的引用,不再开辟新的内存空间

其实String类型常用的方法还有很多,在今后的开发中也会不断用到,所以我认为备一份jdk的API文档随时查阅是很有必要的

2. String 具有不可变性:

说明:

  1. 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。

  2. 当对现的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

  3. 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

代码举例:

public class Example {
	public static void main(String[] args) {
		String a = "Hello";  //字面量的定义方法
		
		String b = "Hello";
		
		String c = new String("Hello");
		
		String d = new String("Hello");
		
		System.out.println(a == b); //true   比较地址值
		
		System.out.println(a == c); //false
		System.out.println(a.equals(c));  //true
		
		System.out.println(c == d);  //false
		System.out.println(c.equals(d));   //true
	}  
}

上述代码的结果中的第一个比较结果完全是巧合,原因是字符串刚生成时调用的是同一块字符串常量池,而字符串常量池不会存在相同类型的常量,这也就意味着这两个字符串的地址值是相同的

如果我们再对a和b赋值然后再比较就能说明问题了

public class Example {
	public static void main(String[] args) {
		String a = "Hello";		
		a += "c";
		
		String b = "Hello";
		b += "c";
		
		System.out.println(a == b); 
	}  
}

运行结果:

在这里插入图片描述
我们同时也可以发现,String实例化的方式有两种:

  1. 通过字面量的方式定义

  2. 通过new + 构造器的方式

第一种方式是在方法区的字符串常量池中直接开辟空间

第二种方式则是在堆生成对象,但引用的值还是来自字符串常量池

String是引用类型,涉及到引用类型的变量的比较,都用equals方法比较稳妥

3. StringBuilder和StringBuffer:

StringBuilder和StringBuffer都是用来拼接字符串的,后期会经常用到

首先看一下String,StringBuilder,StringBuffer三者之间的相关说明:

  1. String:不可变的字符序列;底层使用char[]存储

  2. StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储

  3. StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储

StringBuilder和StringBuffer的内存解析:

以StringBuffer为例:

public class Example {
	public static void main(String[] args) {
		
		StringBuffer sb1 = new StringBuffer();
		
		//查看StringBuffer的初始容量
		System.out.println(sb1.capacity()); 
		//查看StringBuffer的长度
		System.out.println(sb1.length());
	}  
}

运行结果:
在这里插入图片描述

可以看到,StringBuilder的初始容量为16,没赋值时长度为零

当我们插入的字符串长度超过StringBuilder的初始容量时,StringBuilder会进行扩容,扩容的方式是:

原长度*2 + 2,同时将旧的数组赋值到新的数组中

StringBuilder和StringBuffer中的常用方法:

public class Example {
	public static void main(String[] args) {
		
		StringBuffer sb1 = new StringBuffer();

		//使用StringBuffer的append()方法拼接字符串
		sb1.append("Hello");
		
		System.out.println(sb1.toString()); //输出
		
		sb1.delete(0, 3); //删除字符方法,输入索引,左闭右开
		
		System.out.println(sb1.toString());
		
		sb1.setCharAt(0, 'h'); //修改字符,输入索引和修改后的字符
		
		System.out.println(sb1.toString());
		
		sb1.insert(0, 'l');  //插入字符,输入索引和要插入的字符
		
		System.out.println(sb1.toString());
	}  
}

运行结果:
在这里插入图片描述

4. Date工具类:

声明方式:

Date date = new Date();

这里实例化出来的对象打印出来是这样的
在这里插入图片描述
可以发现,虽然控制台打印的是正确的日期,但是可读性并不好,这时候可以用到SimpleDateFormat的方法

//先声明SimpleDateFormat对象,参数里规定日期格式,按顺序分别是年月日时分秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//调用format方法,返回值类型为String
System.out.println(sdf.format(date));

运行结果:
在这里插入图片描述
当然,SimpleDateFormat类还有一个方法,可以将输入的格式转换成默认格式

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date =  sdf.parse("2021-07-23 22:01:23"); //要按照上面规定的格式输入日期
		
System.out.println(date);

运行结果:
在这里插入图片描述
后续出现了Calendar类,一定程度上替换Date类,有需要时翻阅API文档即可,所以不做记录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值