常见类型_字符串..

发布时间:2024年01月05日

1.字符串

在Java中用java.lang.String来表示字符串
字符串底层使用字符数组来储存字符串的每一个字符 但是从Java9开始 就改成使用byte[]去储存字符串中的字符内容
所有字符串字面量都是字符串实例
字符串对象一旦创建成功以后 他的内容是不可以被修改的

2.字符串常量池

在Java中 有一个字符串常量池(SCP 即String Constant Pool)
从Java7开始他属于堆空间的一部分(以前属于方法区的一部分)

当遇到字符串字面量时 会去查看SCP
如果SCP中存在与字符串字面量内容一样的对象A的话 那么就会返回对象A
否则 就会创建一个字符串对象C 加入SCP 然后返回对象C

3.字符串的初始化

接下来主要给定一个实例 去分析底层的内存细节

public class Main {
    public static void main(String[] args) {
        String s1 = "mj";
        String s2 = new String("mj");
        String s3 = new String(s1);
        String s4 = new String(s2);
        char[] cs = {'m', 'j'};
        String s5 = new String(cs);
        String s6 = new String(s5);
    }
}

在这里插入图片描述
我们可以通过断点调试功能来作证一下我们的想法的正确性
在这里插入图片描述
可以看到每一个在main方法中创建的局部变量的id都是不一样 这可以反映出每一个对象的内存都是不一样的(但让内存地址也有这样的作用 但不能说id和内存地址是等价的)
然后也可以看到前四个字符串对象中的字符数组对象是一致的 然后s5和s6的字符数组对象是一致的并且他们的字符数组是有别于cs的字符数组对象的

文章来源:https://blog.csdn.net/m0_71299382/article/details/135402655
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。