【Java成神之路】String str = "i" 与 String str = new String("i") 一样吗?

2022-03-07 11:48:58  晓掌柜  版权声明:本文为站长原创文章,转载请写明出处


一、结论

    不一样,使用String str=“i”,java虚拟机会把它分配到常量池中,而 String str=new String(“i”)创建了一个对象,会被分到堆内存中。

二、说明

    先看一下在代码中的结果

    
    1、不一样的原因很简单,因为他们不是同一个对象。

    2、String str="i";这句话的意思是把“i”这个值在内存中的地址赋给str,如果再有String str3="i";那么这句话的操作也是把“i”这个值在内存中的地址赋给str3,这两个引用的是同一个地址值,他们两个共享同一个内存。
    3、而String str2 = new String("i");则是将new String("i");的对象地址赋给str2,需要注意的是这句话是新创建了一个对象。如果再有String str4= new String("i");那么相当于又创建了一个新的对象,然后将对象的地址值赋给str4,虽然str2的值和str4的值是相同的,但是他们依然不是同一个对象了。
    4、需要注意的是:String str="i"; 因为String 是final类型的,所以“i”应该是在常量池。而new String("i");则是新建对象放到堆内存中。


最新评论: