• 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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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 比较字符串是否相等区分大小写
    。。。。。。

  • 相关阅读:
    栈的实现.
    在HTML 页面中如何显示带圈圈的数字
    无人机在水利行业的应用
    【AIGC专题】Stable Diffusion 从入门到企业级应用0414
    【C++】类和对象(上)
    Vue+SpringBoot打造学生综合素质评价系统
    Windows11 环境安装Gradle
    UE5 ChaosVehicles载具 增加方向盘动画 (连载三)
    Redis系列:使用Redis实现缓存及相关问题
    java语言概述
  • 原文地址:https://blog.csdn.net/DyP__CSDN/article/details/133893906