String s=“12“;和String s = new String(“12“);的区别

首先介绍一下字符串池(String Pool):

在Java编程语言中,字符串池是一个特殊的内存区域,属于Java堆(Heap)的一部分。它是Java虚拟机(JVM)为了优化字符串操作而提供的一个特性。即保存所有java字符串内容,每个字符串仅出现一次。

记住字符串池是堆的一部分。

在Java中,String s = "12"; 和 String s = new String("12"); 的区别主要体现在内存分配和字符串池(String Pool)的使用上。

  1. String s = "12";

    • 这条语句会在字符串池中查找是否已经有一个值为"12"的字符串对象。
    • 如果字符串池中已经存在值为"12"的字符串对象,则直接将这个对象的引用赋给变量s。不再在堆中创建新的对象。
    • 如果字符串池中没有值为"12"的字符串对象,则会在字符串池中创建一个新的字符串对象,并将它的引用赋给变量s。不再在堆中创建新的对象。
  2. String s = new String("12");

    • 这条语句首先会在字符串池中查找是否已经有一个值为"12"的字符串对象。
    • 无论是否找到,它都会在堆(Heap)内存中创建一个新的字符串对象,并把这个新对象的引用赋给变量s
    • 如果字符串池中已经存在值为"12"的字符串对象,那么这个新创建的对象与池中的对象内容相同,但是它们是两个不同的对象。
    • 如果字符串池中不存在值为"12"的字符串对象,那么就在字符串池中也创建一个对象保存。内容相同,但是它们是不同的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z_e_r_o___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值