String s = new String("aa") 创建了几个对象?

本文详细解析了Java中使用new关键字和放射实例创建String对象的方式,并阐述了字符串池的工作机制,包括字符串拼接时对象创建的数量以及字符串常量在编译时的处理过程。

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

1 最近几个同学面试的时候出现了这样一个问题

  刚听到这个题目的时候的确是不知所措:

经过网上的查找和自己的理解来解释一下这个题目的答案

答案是:2

为什么呢???

1 实现我们都知道创建实例有两种方法

  (1)一是用new来创建

  (2)二是同过放射实例来创建,(classs.newInstances)

  所以这就很好的解释了一种情况了

  第二

  对于String 类型的还有一种文本创建方式,就是下面我所说的这种

  String a="abc";

  因为String 是一个final类,JVM虚拟机在他的底层是通过一个字符串池来进行判断的,如果底层没有则创建,如果有则不在创建

  同时这种创建方式还有一个特别的地方,

  String a="bc" 是创建了一次

  String a="ab"+"cd";
  由于常量的值在编译的时候就被确定了。在这里,"ab"和"cd"都是常量,因此变量a的值在
  编译时就可以确定。这行代码编译后的效果等同于:
  Java代码
  String a="abcd";
  因此这里只创建了一个对象"abcd",并且它被保存在字符串池里了。 

  String s = new String ("ab")+"c"创建了几个对象

  创建了2个对象,new string(“ab”)将创建一个string对象;
  String s 将创建第2个string对象。
  “c”是常量在编译的时候就已经作为常量赋值了,不会创建新的对象。
  故共2个。

 

转载于:https://www.cnblogs.com/yaobolove/p/5066656.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值