String s1 = new String(“abc“) 在内存中创建了几个对象

String s1 = new String("abc") 在内存中创建的对象数量

这段代码在内存中可能会创建两个对象。具体数量取决于字符串 "abc" 是否已经存在于字符串池中。

  1. 堆内存中的新对象new String("abc") 会在堆内存中创建一个新的 String 对象,即使 "abc" 已经存在于字符串池中。这个新对象是对池中字符串的一个拷贝。

  2. 字符串池中的对象:在这行代码中,"abc" 是一个字符串字面量,Java 会将它放在字符串常量池(string pool)中。如果 "abc" 已经存在于字符串池中(比如在程序的其他部分已经用到过 "abc"),那么这个步骤不会再创建新对象。如果它还不存在,Java 会在字符串池中创建一个 "abc" 对象。

形象的例子

场景:复印一份文档

想象你有一个公司文档库,所有的文档都存放在一个共享的文件柜中(字符串池)。你的任务是获取一份文档 "abc" 并制作一份复印件。

  1. 查找文件柜:你首先在文件柜中寻找文档 "abc"

    • 如果文件柜里已经有 "abc",你就不需要再创建这个文档;你只会指向这个文档,并准备复印。
    • 如果文件柜里没有 "abc",你就创建一份新的 "abc" 文档,放入文件柜中。
  2. 制作复印件:无论文件柜中是否已经存在 "abc",你都会制作一份复印件,这个复印件是你实际使用的那一份。

    • 这就是堆内存中的 String 对象

总结

  • String s1 = new String("abc") 这行代码至少会创建一个新的 String 对象(堆内存中的拷贝)。
  • 可能还会在字符串池中创建一个 "abc" 对象,前提是字符串池中之前没有这个字面量。

因此,总的来说,这行代码通常会在内存中创建两个对象,一个在堆内存中,另一个可能在字符串池中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值