zoukankan      html  css  js  c++  java
  • String内存解析

    一、String的特性:

    • String是一个final类,代表不可变的字符序列。
      • 体现:当对字符串重新赋值时,需要重新制定内存区赋值,不能使用原有的value进行赋值。
      • 当对现有的字符串进行连接操作时,也需要重新制定内存区域赋值,不能使用原有value进行赋值。
      • 当调用String的replace()修改指定字符或字符串时,也需要重新指定内存区域赋值。 
    • 字符串是常量,用双语号引起来表示。它们的值在创建之后不能更改。
    • String对象的字符内容是存储在一个字符数组value【】中的。
    • 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串声明在字符串常量池中

    二、String的实例化方式:

    方式一:通过字面量的方式:

    String s1 = “123”;
    String s2 = “123”;
    //通过字面量定义的方式:此时s1和s2的数据都是声明在方法区中的字符串池中。

    方式二:通过new+构造器的方式:

    String s1 = new String(“123”);
    String s2 = new String(“123”);
    //此时的s1和s2保存的是地址值,是数据在堆空间开辟空间后对应的地址。

    内存结构图如下:

    而前面我们在讲述其他自定义类中,比较字符串类型的大小也可以有一份内存结构图如下:

    因此可以推导:String s = new String(“abc”);方式创建对象,在内存中其实是创建了2个对象:一个是堆空间中new的结构,另一个是char【】对应的常量池的数据:“abc”。

    关于拼接还有一个特性:

    三、String的其他转换:

    • 字节数组——>字符串
      • String(byte【】):通过使用平台的默认字符集解码指定的byte数组,构造一个新的String。
      • String(byte【】,int offset,int length):用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。
    • 字符串——>字节数组
      • public byte【】 getBytes():使用平台默认字符集将此String编码为byte序列,并将结果储存到一个新的byte数组中。
      • public byte【】 getBytes(String charsetName):使用指定的字符集将此String编码到byte序列,并将结果存储到新的byte数组。
  • 相关阅读:
    EF 使用 oracle
    mysql安装笔记
    解决问题
    第四次冲刺
    第三次冲刺
    SQA
    第二次冲刺
    第一次冲刺,求进步
    Scrum _GoodJob
    我对git 、github的初印象
  • 原文地址:https://www.cnblogs.com/liuhuan425/p/10846789.html
Copyright © 2011-2022 走看看