new String(“111“)到底会创建几个对象

本文详细探讨了Java中的String对象,包括其存储空间、不可变特性以及创建方式。特别地,文章分析了使用new String("111")时可能创建的对象数量,取决于常量池中是否已有相同字符串。最后,介绍了intern()方法的作用和对象创建的两种情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String对象详解

简单描述

字符串可以说是java中非常常见的一种数据类型了,我们在日常的开发中对其的使用及其的频繁,并且它也是笔试面试中常考的一个知识点,因此我们非常有必要对其做一定了解。今天这篇文章以一个常见的面试题为引子,详细的对String做一个描述。

String入门常识

  1. String对象有两个存储的空间,一个常量池(字符串常量池)(jdk1.7后再堆空间中划出一块作为常量池,1.7之前是在方法区中划一块空间做常量池),另一个就是堆空间。
  2. String之所以有两块存储空间,是因为String在编程中比较常用,为了节省空间,同时也提高了效率(减少了对象的创建)。
  3. String是被final关键字修饰的类,因此它是不可变对象,不能被继承。
  4. String对象的拼接都是通过StringBuilder完成,然后调用起toString()方法创建一个新的String对象。
  5. intern()方法:返回调用者对象在常量池中的对象。比如 “111”.intern(); 如果"111"这个String对象在常量池中已经存在,则该方法的调用只会返回该对象,再不做其他操作,如果"111"这个String对象不在常量池中,该方法会在常量池中创建一个,然后返回。

注: 其实intern()方法是为了让调用者使用它在常量池中的对象,因为,无论是通过字面量的方式使用还是通过new 关键字都会在常量池中创建对象。

String的创建方式

1.字面量的方式直接定义:String str = “111”;
2.new关键字创建: String str = new String(“111”);

String str = “111”;会创建几个对象

这种创建方式只会在常量池中创建一个"111"对象。

new String(“111”)会创建几个对象

  • 第一种情况
    当常量池中没有"111"这个字符串时,会创建2个对象。堆、常量池各一个。
  • 第二种情况
    常量池中有"111"这个字符串时,会创建1个对象。只在堆中建一个。
    – 创建过程描述
    当使用new String创建字符串对象时,首先会在堆中创建一个对应的String对象,然后判断该对象在常量池中是否存在,如果存在,则创建对象结束,即创建1个;否则,将该对象本身复制一份放到常量池中。

代码示例

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值