Java学习笔记(六)String类与其API、StringBuffer和StringBuilder

一、String

1.字符串不可变性,在Java里,一旦创建了String类,其类型是不可变的。

String str1 = "hello java ";
System.out.println(str1 + str1.hashCode());
str1 += "Hi java ";
System.out.println(str1 + str1.hashCode());

输出结果:

尽管成功打印出拼接的字符串,但是其哈希码不一样,也就是说两次的str1的地址并不一样,即这是两个不同的对象

其原因是Java 里对字符串进行 “+” 拼接时,实际是调用了concat()方法,其返回的是一个新的字符串实例。

str1 = str1.concat("Hi java ");
str1 += "Hi java";

这两句是一样的结果。

2.字符串池

在Java里,相容内容的字符串,其是相同的对象。如以下str1 和 str2 指向的是同一个对象。

String str1 = "hello java ";
String str2 = "hello java ";
		
System.out.println(str1 == str2);   //这里不是判断两个字符串内容相等,而是判断是否指向同一个对象
		                            //判断两个字符串是否相等用str1.equals
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());

结果:

3.String类常用API

  1. 字符串比较
  • boolean equals(Object other)  -  若字符串与other 相等,返回 true
  • boolean eaualsIgnoreCase(String other)  -  忽略大小写的字符串比较
  • boolean startsWith(String prefix)
  • boolean endsWith(String suffix)  -  如果字符串以。。。开头或结尾,返回true
  • int compareTo(String other)  -  字符串比较大小分别返回小于0,0,大于0的整数
  • boolean contains(String str)  -  判断str是否为字符串的子串,返回true(包含)

    2. 获取子串的方法

  • int indexOf(String str)  -  返回字符串中出现的第一个字符串str下标,没有匹配返回-1
  • int indexOf(String str, int fromIndex)  -  返回字符串中fromIndex之后出现的第一个ch下标,没有匹配返回-1
  • int indexOf(int cp)  -  返回字符串中出现的第一个字符cp(ASCII码)的下标
  • int indexOf(int cp, int fromIndex)
  • int lastIndexOf(String str)  -  返回字符串中出现最后一个字符串str的下标
  • int lastIndexOf(String str int fromIndex)
  • int lastIndexOf(int cp)  -  返回字符串中出现最后一个字符cp(ASCII码)的下标
  • int lastIndexOf(int cp, int fromIndex)
  • String substring(int beginIndex)  -  返回一个新的字符串,内容为该字符串从beginIndex到字符串的结尾
  • String substring(int beginIndex, int endIndex)  -  返回一个新的字符串,内容为该字符串从beginIndex到endIndex的内容 

    3. 其他方法

  • int length()  -  返回字符串的长度
  • char charAt(int index)  -  返回指定index的字符
  • String toLowerCase() 
  • String toUpperCase()  -  返回一个新的字符串,其为该字符串中原始字符为小写的改成大写
  • String trim()  -  返回一个新的字符串,这个字符串将删除原始字符串头部和尾部的空格
  • String concat(String str)  -  将此字符串拼接为一个新的字符串
  • char[] toChatArray()  -  将此字符串转换为一个新的字符数组
  • byte[] getBytes()  -  将此字符串转换为一个新的byte型数组 

二、StringBuffer/StringBuilder

1.String类与StringBuffer/StringBuilder的区别

String类里的字符串是不可以更改的,而实际上我们会有很多字符串拼接的操作,而一旦进行String类的拼接即用“+=”或concat方法拼接字符串,是会产生新的字符串类型,这将会大大消耗系统资源,而StringBuffer/StringBuilder是可以直接修改对象,不会创建新的对象,这样就节省了系统资源的开销而StringBuffer与StringBuilder相比,StringBuffer是线程安全的,而StringBuilder是非线程安全的,相应的StringBuilder会比StringBuffer快一丢丢,所以这里就只学习了StringBuffer

下面对字符串进行拼接并打印出消耗时间感受两者的区别

final long CIRCLE = 100000;
String str1 = "";
	
long startTime = System.currentTimeMillis();
for(int i = 0; i < CIRCLE; i++) {
	str1 += "+";
}
long endTime = System.currentTimeMillis();
System.out.println("String类:" + (endTime - startTime) + "ms");
		
StringBuffer str2 = new StringBuffer();
startTime = System.currentTimeMillis();
for(int i = 0; i < CIRCLE; i++) {
	str2.append("+");
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer类:" + (endTime - startTime) + "ms");

结果如图:

2.StringBuffer的API

StringBuffer只负责字符串改长,一些字符串的比较要转换成String类进行操作

  • StringBuffer  -  构造方法,默认的buffer是十六个字节,可以自己指定buffer的大小。
  • append()  -  StringBuffer的拼接方法,可拼接字符串、字符、ASCII码
  • equals()  -  StringBuffer的equals方法是比较的地址,要比较StringBuffer的字符串需要转化成String类,如
StringBuffer str1 = new StringBuffer("StringBuffer");
StringBuffer str2 = new StringBuffer("StringBuffer");
System.out.println(str1.toString().equals(str2.toString()));
  • reverse()  -  反转字符串序列
  • delete(int start, int end)  -   移除此字符串中的字符
  • insert(int offset, String str)   -  将字符串str插入到字符序列中,有多个重载的方法
  • replace(int start, int end, String str)  -  使用给定的字符串str替换字符串序列中的字符
  • setCharAt(int index, int char)  -  在指定索引位置设定字符
  • int capacity()  -  返回StringBuffer当前的缓存容量
  • setlength(int newLength)  -  设置StringBuffer的新长度
  • trimToSize()  -  若缓冲区大于其当前的字符串,可调整大小,以节省空间

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值