String的深入认识

1.String类的理解(以JDK8为例)

1.1类的声明

public final class String
implements java.io.Serializable, Comparable, CharSequence

final: String是不能被继承的
Serializable: 可序列化的接口。凡是实现此接口的对象可以通过网络或本地流进行数据的传输
Comparable: 凡是实现此接口的类,其对象都可以比较大小。

1.2内部声明的属性

jdk8中
private final char value[];
①存储字符串数据的容器
②final:指明此value数组一旦初始化,其地址就不可变。
jdk9开始:
为了节省内存空间做了优化
private final byte[] value;
①存储字符串的容器

2.字符串常量的存储位置

①字符串常量都存储在字符串常量池(StringTable)中
②字符串常量池不允许存放两个相同的字符串常量
③字符串常量池:在不同的JKD中,存放位置不同,在JKD7以前存放在方法区,在之后放在堆空间

3.String的不可变性的理解

①当对字符串变量重新进行赋值时,需要重新指定一个字符串常量的位置进行赋值,不能在原有地址进行修改
②当对现有的字符串进行拼接操作时,需要重新开辟空间保存拼接以后得字符串,不能在原有的位置修改
③当调用字符串replace()替换现有的某个字符时,需要重新开辟空间保存修改以后的字符串,不能在原有的位置进行修改

4.String实例化的方式

第一种方式:String s1=“hello”;
第二种方式:String s1=new String(“hello”);

public void test(){
        String s1="hello";
        String s2="hello";
        String s3=new String("hello");
        String s4=new String("hello");
        System.out.print(s1==s2);//true
        System.out.print(s1==s3);//false
        System.out.print(s1==s4);//false
        System.out.print(s3==s4);//false
}

String s=new String(“hello”);的内存解析?或String s=new String(“hello”);在内存中创建了几个对象?
创建了两个对象,一个是堆空间中new的对象,另一个是在字符串常量池中生成的字面量。

5.String的连接操作

①常量 + 常量 :结果仍然存储在字符串常量池中
②常量 + 变量 或者 变量 + 变量,都会通过new的方式创建一个新的字符串,返回堆空间中此字符
③调用字符串中的intern(),返回的是字符串常量池中的字面量的地址

6.String的构造器和常用方法

6.1构造器

①public String() 初始化新创建的对象,以使其表示空字符序列
②public String(String original) 初始化一个新创建的 String对象,使其表示一个与参数相同的字符序列
③public String(char value[]) 通过当前参数中的字符数组来构造新的String
④public String(char value[], int offset, int count)通过字符数组的一部分来构造新的String
⑤public String(byte[] bytes) 通过平台的默认字符集解码当前参数中的字节数组来构造新的String
⑥public String(byte[] bytes,String charseName) 通过使用指定的字符集解码当前参数中的字节数组来构造新的String

6.2常用的方法

①int length() 返回字符串的长度
②boolean isEmpty() 字符串是否为空
③boolean equals 比较字符串是否相等区分大小写
。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值