String str = new String(“abc“)

new 出来的对象和这个对象的引用 str,字符串的值 abc,这三个元素分别放在哪里?

  • 字符串 abc 存在字符串常量池中,位于方法区
  • 创建的 String 对象位于堆内存,对象包含字符串的内容 "abc",但它是一个独立的对象,与字符串常量池中的对象不同。首次创建 String 对象时,字符串常量池并没有 abc,那么会在字符串常量池创建 abc 字符串,然后获取其引用,最终在堆中创建了一个"abc"的 String 对象;第二次创建 String 对象时,会先去常量池找有没有字符串 abc,找到了就获取其引用,然后创建新的 String 对象。
  • 引用变量 a 是一个指向 String 对象的引用。它存储了 String 对象的内存地址,而不是对象本身的内容。引用变量 a 本身是一个局部变量,存储在当前线程的栈内存中。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计