字符串概述

特点

  1. 字符串是常量,创建之后不可改变
  2. 字符串字面值存储在字符串池中,可以共享 (字符串池在方法区中)

创建字符串的流程

  1. 现在字符串池中给name生成一块空间
  2. 栈中有块空间指向字符串池的"name"
  3. 如果写
String name = "zhangsan" //产生一个对象,在字符串池中储存
  1. 字符串池中会给"zhangsan"新生成一块空间,然后让name指向"zhangsan",之前的字符串不会被修改
  2. 如果
String name2 = "zhangsan"

首先会在字符串池中查找是否已经存在"zhangsan" 6. 如果存在,则让name2也指向"zhangsan",如果不存在则在字符串池中新建一块给"zhangsan" 用这种方式达成了共享 7. 如果用

String s2= new String("Hello");

则会产生两个对象,堆和字符串池各一个。 在这种情况下 string==string2的结果是false 而string.equals(string2)的结果是true,因为equals比的不是堆里的而是字符串池里的


本文章使用limfx的vscode插件快速发布