栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java如何存储字符串以及子字符串在内部如何工作?[关闭]

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

Java如何存储字符串以及子字符串在内部如何工作?[关闭]

查看评论:

    String str = "abcd";  // new String LITERAL which is interned in the pool    String str1 = new String("abcd"); // new String, not interned: str1 != str    String str2 = str.substring(0,2); // new String which is a view on str    String str3 = str.substring(0,2); // same: str3 != str2    String str7 = str1.substring(0,str1.length()); // special case: str1 is returned

笔记:

  • 从Java 7u6开始,子字符串返回一个新字符串,而不是原始字符串的视图(但这在该示例中没有区别)
  • 致电时的特殊情况
    str1.substring(0,str1.length());
    -请参见代码:
        public String substring(int beginIndex, int endIndex) {        //some exception checking then        return ((beginIndex == 0) && (endIndex == value.length)) ? this     : new String(value, beginIndex, subLen);    }

编辑

什么是观点?

在Java 7u6之前,String基本上是a

char[]
,其中包含带有偏移量和计数的字符串
count
字符(即,字符串由从中的
offset
位置开始的字符组成
char[]
)。

调用子字符串时,将创建一个具有相同

char[]
但不同的偏移量/计数的新字符串,以有效地在原始字符串上创建视图。(如上所述,当count =length和offset = 0时除外)。

由于Java 7u6,新

char[]
创建的每个时间,因为没有更多的
count
还是
offset
外地的字符串类。

公用池到底存储在哪里?

这是特定于实现的。池的位置实际上已在最新版本中移动。在较新的版本中,它存储在堆中。

如何管理游泳池?

主要特征:

  • 字符串文字存储在池中
  • 实习字符串存储在池中(
    new String("abc").intern();
  • 当一个字符串
    S
    被拘留(因为它是文字还是因为
    intern()
    被调用),JVM将参考返回一个字符串池中是否有一个是
    equals
    S
    (因此
    "abc" == "abc"
    应该总是返回true)。
  • 可以对垃圾池中的字符串进行垃圾回收(这意味着如果某个被填充的字符串变满,可能会在某个阶段将其从池中删除)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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