首页IT科技string的(String详解)

string的(String详解)

时间2025-07-29 23:29:23分类IT科技浏览4727
导读:String对象的不可变原因,String对象的内存布局,及String对象之间的执行==,equals,+运算时的分析。...

String对象的不可变原因              ,String对象的内存布局                       ,及String对象之间的执行==        ,equals           ,+运算时的分析              。

Author: Msuenb

Date: 2023-02-16

java.lang.String类代表字符串                       。String 对象用于保存字符串                      ,也就是一组字符序列        。字符串是常量            ,它们的值在创建后不能更改           。

String 的特点

String 是 final 类        ,不能被其他的类继承

String 类实现了 Comparable 接口                      ,String 对象可以比较大小

String 对象内部是用字符数组保存字符串内容的

JDK9之前是 private final char value[] 数组                ,JDK9之后是 byte[] 数组

"hello"等效于char[] value = {h, e, l, l, o}

String 对象是不可变对象    ,一旦进行修改                      ,就会产生新对象

注意:

String 类的 char[] value 数组是 final 修饰的                    ,说明 value 数组地址不可变,不是数组元素不可变 由于 value 数组是 private 的                  ,所以在 String 类外无法直接修改 value 数组的元素值(除非用反射) String 类中的方法涉及到 value 数组长度变化                        ,或修改元素值    ,都是用用新对象来表示修改后内容 final char[] value = {h, e, l, l, o}; // value = new char[5]; // value 的地址不可修改 value[0] = H; // 可以修改 value 元素值 String str = "hello"; str = "world"; // 不会修改 "hello", 会在池中创建一个新的String对象接受 "world" str指向这个新对象 共会创建两个对象

String 对象不可变              ,可以共享(节省内存)                      。Java 中把需要共享的字符串常量对象存放在常量池中            。

String s1 = "hello"; String s2 = "hello"; System.out.println(s1 == s2); // true // 内存中只有一个 "hello" 对象被创建                       ,同时被s1和s2共享

创建String对象

总的来说        ,String 对象的创建方式有两种:直接赋值 和 使用构造器           ,这两种方式的机制是不一样的

直接赋值:String str1 = "hello"; 先从常量池中查看是否有 "hello" 数据空间                      ,如果有            ,直接指向;如果没有        ,重新创建                      ,然后指向        。 str1 最终指向的是常量池的空间地址 调用构造器:String str2 = new String("hello") 先在堆中创建空间                ,里面维护了 char[] value属性                      。 如果常量池中有 "hello" 数据空间    ,value 直接指向 "hello" 空间;如果没有                      ,重新创建                    ,然后指向                。 str2 最终指向的是堆中的空间地址;value 才是指向常量池的空间地址 String 内存分析

针对下面两行代码分析 String 对象的创建过程和内存布局

String str1 = "hello"; String str2 = new String("hello");

String 内存布局:

声明:本站所有文章,如无特殊说明或标注                  ,均为本站原创发布    。任何个人或组织                        ,在未征得本站同意时    ,禁止复制                、盗用                      、采集       、发布本站内容到任何网站            、书籍等各类媒体平台                      。如若本站内容侵犯了原著者的合法权益              ,可联系我们进行处理                    。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
post reading(PostgreSQL中如何实现高效的数据索引策略) 电脑怎么打出标点符号?(电脑怎么打出特殊标点符号表情_3种方法完全解决你的问题)