栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String特性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String特性

文章目录
  • 1、前提知识
  • 2、创建String的过程
    • 字面量声明
    • new一个字符串对象
    • 总结创建过程
  • 3、字符串的不可变性
  • 4、字符串拼接
    • 总结

1、前提知识

Java程序的运行内存中有三个区域

  • 堆:存储对象
  • 栈:用于存储变量或常量的引用变量
  • 常量池:存储字面量
2、创建String的过程

字符串的创建有两种方式

  1. 用字面量创建String s = "abc";
  2. new一个字符串对象String s = new String("abc");
字面量声明
  1. 先去常量池中,看是否存在这个字面量,如果存在,就把字面量在常量池中的地址返回给引用变量
  2. 如果不存在,就在常量池中开辟空间存储常量值,再把地址返回给引用变量
new一个字符串对象
  1. 先去常量池中,看是否存在这个字面量,如果存在,就在堆中创建空间,再把堆地址返回给引用变量
  2. 如果不存在,就在常量池中开辟空间存储常量值,再在堆中创建空间,把堆地址返回给引用变量

PS:引用变量指向堆地址,堆地址中的值是字符串在常量池的地址(C语言的指针)

总结创建过程

常量池中只会存在一个相同值的字面量

  1. 先去常量池中,看是否存在对应的字符串常量值,如果不存在,就创建一个
  2. 如果用字面量创建,就返回常量池中的地址
  3. 如果new一个对象,就在堆中开辟空间,在返回堆中的地址
3、字符串的不可变性

字符串的不可变性

4、字符串拼接
String s1 = "a";
String s2 = "b";
String s3 = "ab";

存在三种情况

  1. String s5 = s1 + s2;变量 + 变量
  2. String s6 = s1 + "b";变量 + 字面量(常量)
  3. String s7 = "a" + "b";字面量(常量)+ 字面量(常量)

验证

 System.out.println(s5 == "ab");  false
 System.out.println(s6 == "ab");  false
 System.out.println(s7 == "ab");  true
 System.out.println(s7 == s5.intern());  true
 final String a = "aa";
 String b = "bb" + a;
 System.out.print(b == "aabb");true
总结
  1. 字面量与字面量拼接的字符串会放在常量池,并且常量池中不会存在相同值的字面量
  2. 只要有一个字符串变量参与拼接,结果存放在堆中
  3. intern()方法返回常量池中的地址
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/854496.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号