写点什么

Java 中 String 类的前世今生

用户头像
卢卡多多
关注
发布于: 2021 年 06 月 07 日
Java中String类的前世今生

String 的使用细则


简介 String 类是我们在我们 java 的开发的过程中,使用到接触到最多的一个类,比如,用户名,所有的软件系统都是给人用的,系统会记录出用户名,密码等,都是用 String 类来==存储==的,(实际用的是它的兄弟类 StringBuilder 和 StringBuffer),还有一个最主要的用途就是传输对象


  • 实体类实现序列化

  • 建立一个类 Student 时候,这个类将会实现的是 Serializable(接口-序列化),相当于压缩成一个具体的==字符串序列==,

  • 传输

  • 将数据经过 json 数据,具体的 url 的形式(路径),传输

  • 反序列化

  • 反序列化显示出本来的对象信息,可能包含年龄、姓名等

String 的考点一:



  • 认识 String

  • 首先是一个字符串,存在于一个 java.lang 包中的(JDK 自带的

  • String 的组成:

  • String 底层是由数组实现的: (话不多说,上源码)

    这个 value 就是所谓的底层创建的数组


==这里将是重点==:


String 的底层是由 char 类型的==数组==实现的,并且这个类,不能被继承--->==final==也不能改变,(重新赋值后会变成新的对象)--->==private==(私有的)


    String的底层源码构造: /** The value is used for character storage. */    private final char value[];
复制代码


  • String 的创建上述说 String 不能被改变,那岂不是有很多的 String 的对象啦,一个个创建,效率不高,会对内存和性能有很大的要求,


这里我们有几个概念型的名词:


常量池:因为 String 的不可改变的特性,不就和我们常遇见的圆周率都是固定的常量(const)数了吗


池---鱼缸的意思,我们将鱼缸里一般放的是相同类型的鱼,所以常量池里面:就是解决字符串冗余而形成的;(我们创建一个 String 的实例,就会去常量池里面找一个,如果存在,就会用常量池中存在的----也就是说会用同样的对象-->地址和值都相等,免去了重复创建,耗损内存,影响性能的作用)


字符串常量池在哪里 Orac1e 官方虚拟机 HotSpot( 1 ) JDK1.6 以及之前: 方法区( 2 ) JDK1.7 : 挪到堆中, 即在堆中单独划分了一块来存字符串常量( 3 )JDK1.8 :挪到一个“ 元空间 meta spacet', 即类似于方法区


因为常量池存储的常量多---单独的元空间

String 的考点二:


1.Sting hello="Helloword"的创建过程 (字面量)

上述有 String 的构造器--利用的是无参构造器,去实例对象,这个对象 hello 会在堆内存中存储一份,



三个问题:1. 创建的 String 的对象有几个,2.分别存储在哪里,3.存储的类型是什么


解答一:创建对象,要是单纯的字面量的 String 类型示例:


String s1="hellojava";
复制代码


没有 new--对象存储在常量池中一份:



有 new---对象存储在堆中一份---并且指向常量池(他们的内存地址是一样的;==true)


这里小知识点:我这里的笔记都是以 JDK 1.8 为例的;JDK1.9 之前是 char[]数组 JDK1.9 以后是 byte[]的数组;

发布于: 2021 年 06 月 07 日阅读数: 78
用户头像

卢卡多多

关注

还未添加个人签名 2020.04.12 加入

还未添加个人简介

评论

发布
暂无评论
Java中String类的前世今生