Java常用类详解——String类

目录

1. String类的理解

2. String创建对象的解析

2.1 方式一:直接赋值

2.2 方式二:调用构造器

2.3 内存分布图

3. String的特性

4. String类 常用方法

4.1 介绍

4.2 常用方法


1. String类的理解

(1)String 对象用于保存字符串,也就是一组字符序列。

(2)字符串常量对象是用双引号括起的字符序列。例如:"你好"、"12.97"

(3)字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉空)占用两个字节。

(4)String类常用的构造方法:

①String s1 = new String();

②String s2 = new String(String original);

③String s3 = new String(char[] a);

④String s4 = new String(char[] a, int startlndex, int count);

(5)String类实现了Serializable 和 Comparable接口。Serializable接口使String可以串行化(可以在网络传输),Comparable接口使String对象可以相互比较大小。

(6)String类是final类,不能被其他的类继承。

(7)String类底层有属性 private final char value[]; 用于存放字符内容。一定要注意:value是一个final类型,一旦被赋值了,不可以修改(不是里面的字符内容不能修改,而是value的地址不能修改,不能指向新的地址)。

2. String创建对象的解析

2.1 方式一:直接赋值

String s = "hsp";

解析:先从常量池查看是否有"hsp"的数据空间,如果有,直接指向;如果没有,则重新在常量池创建,然后指向。s最终指向的是常量池的空间地址

2.2 方式二:调用构造器

String s2 = new String("hsp");

解析:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。如果常量池中没有hsp,则重新创建;如果有,直接通过value指向。s最终指向的是堆中的空间地址

2.3 内存分布图

3. String的特性

(1)String是一个final类,代表不可变的字符序列。

(2)字符串是不可变的。一个String对象一旦被分配,其内容是不可变的。(如果再次给String对象赋值,是指向了新的常量池属性,是改变指向,没有直接改变内容,原本的内容还在常量池中)

(3)重要规则:String c1 = “ab” + “cd”; 常量相加,c1指向的是常量池。String c2 = a + b; 变量相加,c2指向的是堆。

①如果同时给String对象 赋值多个字符串常量,编译器底层会自动优化,最后只创建一个整体的常量进行指向。

②如果将多个已经创建的String对象,赋值给一个新的String对象,则这个新的String对象 会将赋值的对象指向的字符串 在常量池中依次整合为一个字符串对象。

例1:String a = “hello” + “hi”; 在编译器底层优化后,等价于 String a = “hellohi”;

例2:String a = “hello”;   String b = “hi”;   String c = a + b;

第三行代码执行的底层是:先创建一个StringBuilder sb = StringBuilder();。  然后执行sb.append(“hello”); 将hello添加到一个新字符串中。  然后再执行sb.append(“hi”); 将hi添加到同一个字符串中。  最后调用toString方法,让c指向堆中的对象String c = sb. toString(); 而底层的value[]数组 指向常量池中的“hellohi”。

4. String类 常用方法

4.1 介绍

String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer两个类来增强String的功能,并提高效率。但String类在配置文件、表示一些常见的值等 还是很有用。

4.2 常用方法

1)equals  区分大小写,判断内容是否相等

2)equalslgnoreCase  忽略大小写,判断内容是否相等

3)length  获取字符的个数,字符串的长度

4)indexOf  获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1

5)lastlndexOf  获取字符在字符串中最后1次出现的索引,索引从0开始,如找不到,返回-1

6)substring  截取指定范围的子串

7)trim  去前后空格

8)charAt  获取某索引处的字符,注意不能使用Str[index]这种方式

9)toUpperCase  转换成大写

10)toLowerCase  转换成小写

11)concat  拼接字符串(注意:对原本的字符串没有影响,返回的结果才是被改变的)

12)replace  替换字符串中的字符(注意:对原本的字符串没有影响,返回的结果才是被改变的)

13)split  分割字符串(对某些分割字符,我们需要转义 比如 | 、\\等)

14)compareTo  比较两个字符串的大小(解释:①如果字符串长度相同,并且每个字符也相同,就返回0。 ②如果字符串长度相同或者不相同,但是在进行比较时,其中的字符可以区分大小,就返回字符串1的第一个不同的字符 减去 字符串2的第一个不同的字符 得到的ASCII码。 ③如果前面的部分都相同,就返回 字符串1的字符长度 减去 字符串2的字符长度)

15)toCharArray  转换成char[]字符数组(char[]字符数组 转换为String类型,可以直接 new String(字符数组名) 来创建一个新的String

16)format  格式化字符串 (占位符解释:%s 表示字符串;%d 表示整数;%.2f 表示小数,保留两位小数;%c 表示字符)

17) printf 格式化输出(占位符与上一点相同)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值