String s1=new String(“abc“); 和String s1=“abc“区别

x33g5p2x  于2022-02-07 转载在 其他  
字(0.5k)|赞(0)|评价(0)|浏览(229)

在讨论他们的区别时,我们要知道java中的内存,主要分为堆和栈。栈中一般存放的是java中的基本数据变量 比如 int,double,float 还存放了对象的引用变量 如 Person person =new Person() 中的 (Person person )。

而堆内存则存放了 new Person。

String s = “abc” :s是存储在栈里。
先在栈中创建一个对String类的对象引用变量s,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令s指向”abc”,如果已经有”abc” 则直接令s指向“abc”。例子如下:

String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2); //true

说明s1和s2指向同一个对象

String s = new String(“abc”) : s是存储在堆里。

每调用一次就会创建一个新的对象。 例子如下:

String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2); //true

说明s1和s2是不指向同一个对象的

相关文章