java---认识String类

目录

一:常用方法

1.1 字符串构造

1.2 String对象的比较

1. ==比较是否引用同一个对象

2. boolean equals(Object anObject)方法比较 ​

3.int compareTo(String s)方法比较

4. int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较 

1.3 字符串查找 

1.4 转化

1. 数值和字符串转化

2. 大小写转换

3. 字符串转数组

 4. 格式化

​1.5 字符串常量池(StringTable)

1.创建对象

2.字符串常量池

3. intern方法

1.6 字符串修改

二:StringBuilder和StringBuffer

2.1 StringBuilder的介绍


一:常用方法


1.1 字符串构造

注意:

1. String是引用类型,内部并不存储字符串本身 。

2. 在Java中“”引起来的也是String类型对象。

// 打印"hello"字符串(String对象)的长度
System.out.println("hello".length());

1.2 String对象的比较

1. ==比较是否引用同一个对象

注意:对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址。

2. boolean equals(Object anObject)方法比较 

3.int compareTo(String s)方法比较

比较规则:

如果当前对象应排在参数对象之前,返回小于0的数字;

如果当前对象应排在参数对象之后,返回大于0的数字;

如果当前对象和参数对象不分先后,返回0。

与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。

具体方式:

1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值

2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值

4. int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较 

1.3 字符串查找 

方法功能
char charAt(int index)返回index位置上字符,如果index为负数或者越界,抛出 IndexOutOfBoundsException异常
int indexOf(int ch)返回ch第一次出现的位置,没有返回-1
int indexOf(int ch, int fromIndex)从fromIndex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str)返回str第一次出现的位置,没有返回-1
int indexOf(String str, int fromIndex)从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch)从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch, int fromIndex)从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返 回-1
int lastIndexOf(String str)从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str, int fromIndex)从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返 回-1

 注意:上述方法都是实例方法。

1.4 转化

1. 数值和字符串转化

2. 大小写转换

字符的不可变性

字符的不可变性不是因为被final修饰,final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。

3. 字符串转数组

 4. 格式化

1.5 字符串常量池(StringTable)

1.创建对象

上述程序创建方式类似,为什么s1和s2引用的是同一个对象,而s3和s4不是呢? 

在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、 更节省内存,Java为8种基本数据类型和String类都提供了常量池。

为了节省存储空间以及程序的运行效率,Java中引入了:

1. Class文件常量池---类似是一个数组:每个.Java源文件编译后生成.Class文件中会保存当前类中的字面常量以及符号信息

2. 运行时常量池:在字节码文件被加载时,字节码文件中的常量池也被加载到内存中,运行时常量池每个类都有一份

3. 字符串常量池:全局共享的

2.字符串常量池

字符串常量池在JVM中是StringTable类,实际是一个固定大小的HashTable。

注意:

1. 在JVM中字符串常量池只有一份,是全局共享的

2. 刚开始字符串常量池是空的,随着程序不断运行,字符串常量池中元素会越来越多

3. 当类加载时,字节码文件中的常量池也被加载到JVM中,称为运行时常量池,同时会将其中的字符串常量保存在字符串常量池中,此时main方法还没有运行

4. 字符创常量池中的内容:一部分来自运行时常量池,一部分来自程序动态添加

3. intern方法

intern是一个native方法(Native方法指:底层使用C++实现的,看不到其实现的源代码),该方法的作用是手动将创建的String对象添加到常量池中。

1.6 字符串修改

尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

 如果要修改建议尽量使用StringBuffer或者StringBuilder。

二:StringBuilder和StringBuffer


2.1 StringBuilder的介绍

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的。

方法说明
StringBuff append(String str)在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、 double、float、int、long、Object、String、StringBuff的变量
char charAt(int index)获取index位置的字符
int length()获取字符串的长度
int capacity()获取底层保存字符串空间总的大小
void ensureCapacity(int mininmumCapacity)扩容
void setCharAt(int index, char ch)将index位置的字符设置为ch
int indexOf(String str)返回str第一次出现的位置
int indexOf(String str, int fromIndex)从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str)返回最后一次出现str的位置
int lastIndexOf(String str, int fromIndex)从fromIndex位置开始找str最后一次出现的位置
StringBuff insert(int offset, String str)在offset位置插入:八种基类类型 & String类型 & Object类型数据
StringBuffer deleteCharAt(int index)删除index位置字符
StringBuffer delete(int start, int end)删除[start, end)区间内的字符
StringBuffer replace(int start, int end, String str)将[start, end)位置的字符替换为str
String substring(int start)从start开始一直到末尾的字符以String的方式返回
String substring(int start,int end)将[start, end)范围内的字符以String的方式返回
StringBuffer reverse()反转字符串
String toString()将所有字符按照String的方式返回

为什么StringBuffer 比 StringBuilder 效率慢?

导致StringBuffer效率低一些的原因就是StringBuffer的几乎所有方法都加了synchronized。目的是为了确保多线程的安全。

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值