关于直接声明String和new String()区别

首先我们要明确String本质上是final

  1. String s1 = “a”; 此时s1指的是常量池中的"a"

  2. String s2= s1 + “b”; 此时s2指的是堆里面的"ab",原来的"a"字符串对象已经丢失,在堆空间里面产生一个字符串s1+“b”。这样是会降低效率,尤其是在循环中。

  3. String s3 = “ab”; 此时s3指向的是常量池中的"ab"。

  4. String s4= “a”+“b” ;此时s4指向已经创建好的字符串“ab”.

  5. String s5 = s1.intern; 堆空间的s1对象是在调用intern()之后,会将常量池中已经存在的"ab"字符串
    赋值给s4.
    在这里插入图片描述

这个是我在学习尚硅谷的时候截下来的图,很明显这个似乎就跟我们学习jdbc工具类的差不多,用户和密码等在声明的时候用的是final。
因此很容易看清楚:当我们直接用String s = “a”; 的时候指向的是常量池,当我们在后面加上变量"i"的时候会重新指向堆内存里面.

在我们使用new String去声明的时候指向的是堆内存中的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值