java中new和不new的区别

大概的就是长这个样子

//不new
String text = "hello";
//new
String textObject = new String("hello");

从功能上来讲,这两条语句的意思是一样的,都是创建一个值为 "hello" 的字符串对象,但是他们的实现方式不同

一、使用字面值创建字符串对象

String text = "hello";

这种方式是使用字符串字面值直接创建一个字符串对象。当编译器遇到字符串字面值时,它会在字符串常量池中查找是否已经存在相同值的字符串对象,如果存在,则直接返回该对象的引用;如果不存在,则在字符串常量池中创建一个新的字符串对象,并返回其引用。因此,如果字符串常量池中已经存在相同值的字符串对象,那么多个字符串变量可以共享同一个对象

二、使用构造函数创建字符串对象

String textObject = new String("hello");

这种方式是使用 String 类的构造函数显式地创建一个字符串对象。不同于使用字面值创建的字符串对象存储在字符串常量池中,通过构造函数创建的字符串对象存储在堆内存中。即使字符串常量池中已经存在相同值的字符串对象,通过构造函数创建的对象也会在堆内存中新建一个副本。这意味着,即使两个字符串的内容相同,它们在内存中也是不同的对象,不会共享内存

三、总结

虽然这两种方式都可以创建字符串对象,但是它们的存储位置和内存共享情况是不同的。通常情况下,推荐使用第一种方式,即使用字符串字面值创建字符串对象,因为它更加高效并且能够利用字符串常量池的特性来节省内存

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值