1.初识String类
String是一个引用类型,所以str可以直接赋值一个字符串。
并且Java中也没有\0这种说法。
2.String的构造方法
可以直接用字符串常量进构造,也可以用new的方法去构造(二者等价)
也可以传入一个字符数组进入,也会被转化为字符串。
3.String的内部实现
大家可能会疑惑String内部的hash是用来干什么的?
String
类中的hash
通常不是直接暴露给用户的字段,但字符串对象在内部或在使用时(如存储在HashSet
、HashMap
等基于哈希的集合中)会计算其哈希码(hash code)。这个哈希码是一个整数,用于快速比较字符串对象是否相等,而不需要逐字符比较,这在处理大量字符串时能够显著提高性能。
- 哈希码的计算:Java中的
String
类重写了Object
类的hashCode()
方法,以提供基于字符串内容的哈希码。这样,如果两个字符串内容相同(即equals()
方法返回true
),那么它们的哈希码也相同。 - 用途:哈希码主要用于基于哈希的集合中,如
HashSet
、HashMap
等,以提高查找、插入和删除操作的效率。
4.String的成员函数
要获取字符串的某一位,可以用charAt(),下标从0开始。
查某个字符第一次初现的下标可以用indexOf().
同样也可以用来查一个字串。
lastIndexOf可以反向查找。
ValueOf可以把整数,boolean甚至自定义类转化为字符串。
转换函数
String substring(int beginIndex)
从指定索引截取到结尾
String substring(int beginIndex, int endIndex)
截取部分内容
5.
字符串的不可变性
String
是一种不可变对象
.
字符串中的内容是不可改变。字符串不可被修改,是因为:
1.
String
类在设计时就是不可改变的,
String
类实现描述中已经说明了
以下来自
JDK1.8
中
String
类的部分实现:
String
类中的字符实际保存在内部维护的
value
字符数组中
,该图还可以看出:
1. String
类被
fifinal
修饰,表明该类不能被继承
2. value
被修饰被
fifinal
修饰,表明
value
自身的值不能改变,即不能引用其它字符数组,但是其引用空间中 的内容可以修改
2.
所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
【
纠正
】网上有些人说:字符串不可变是因为其内部保存字符的数组被
fifinal
修饰了,因此不能改变。
这种说法是错误的,不是因为
String
类自身,或者其内部
value
被
fifinal
修饰而不能被修改。
fifinal
修饰类表明该类不想被继承,
fifinal
修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内
容是可以修改的
。
6.
字符串修改
注意:尽量避免直接对
String
类型对象进行修改,因为
String
类是不能修改的,所有的修改都会创建新对象,效率
非常低下。
因此:尽量避免对
String
的直接需要,如果要修改建议尽量
使用
StringBuffffer
或者
StringBuilder
。
借助
StringBuffffer
和
StringBuilder
StringBuilder
的介绍
由于
String
的不可更改特性,为了方便字符串的修改,
Java
中又提供
StringBuilder
和
StringBuffffer类。这两个类大 部分功能是相同的,大家可以参考
Java Platform SE 8
String
和
StringBuilder
最大的区别在于
String
的内容无法修改,而
StringBuilder
的内容可
以修改
。频繁修改字符串的情况考虑使用
StringBuilder
。
注意:
String
和
StringBuilder
类不能直接转换。如果要想互相转换,可以采用如下原则
:
String
变为
StringBuilder:
利用
StringBuilder
的构造方法或
append()
方法
StringBuilder
变为
String:
调用
toString()
方法。
至此关于String类的讲解到此结束,谢谢观看。