String对象

    String str1 = “Hello” ;

  这种采用直接赋值的方式,首先 str1 是一个匿名对象,然后在内存中的表现是这样的

 

  栈内存中保存的是 str1    堆内存中保存的是 “Hello”  就这些, 不会占用其它的空间了。

 

  当使用这种方式的时候  :

 

   String  str1 = new String("Hello");

   

    在内存中是怎么操作的呢?

    首先和在上面的一样, 在栈内存中有一片区域, 存储str1 , 堆内存中存储 “Hello”, str1指向"Hello".

 

     和String  str1 = new String("Hello"); 相比 , 他还多了个 new 啊!  有了这个 new ,就不一样了!

在堆内存中,就会再增加一片内存空间, 而且是以 “Hello” 为 内容的.

 

          String str1 = new String("Hello")  这里的  "Hello" 是指向 堆内存中空间中最上面的那个, new String()指向最后申请出来的那片空间,  而最开始申请的那片堆内存空间俨然成了垃圾.

 

public class Test{

    public void main(String []args){

        String str1 = "123";

        String str2 = "123";

        String str3 = "123";

    }

 

}

这里可以看到,都是采用直接赋值的方式,其实在String 中, 直接赋值的方式 是会在 字符串池中保存内容的.

 

   就拿上面的来说,String str1 = "123";  首先在字符串池中存了这么一个值, 当String str2 = "123" 的时候,因为前面有一个相同的值了,就不会再去堆内存空间中申请那么一片区域了,而是从内存池中拿出那个值来继续使用.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值