java 字符串 内部,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)。

可以对垃圾池中的字符串进行垃圾回收(这意味着如果某个被填充的字符串变满,可能会在某个阶段将其从池中删除)

2020-09-08

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值