对于String类中的"abc"与new String("abc")的一些理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wq1134302142/article/details/52177680

string类:

string类是引用是数据类型,但是在使用之前也要进行初始化,.

|--String中有很多方法:获取字符,字符串与字符数组之间的转换,以及获得子串,将字符串变成大写或者小写等等


String s1 ="abc";
String s2 = new String("abc");
对于这个问题,我想网上的说法应该是一大堆吧,这里涉及到了一个常量池的概念,String Pool.这个是干嘛的呢?
据我个人理解,是用来存储对象的,当再次去创建对象的时候,可以直接去常量池中匹配,如果有了所要创建的对象,那在常量池中就不会再分配内存了,直接两个对象共用一个地址值,
s1 是一个引用,"abc"是在常量池中的一个对象,我说了,如果常量池中没有,就会创建一个,也就是"abc"在常量池中会分配一段空间然后呢有一个地址值,这个地址值指向这个引用s1;
s2就不一样了,不一样体现在哪里呢?
我们来看一下,关键字new是用来干什么的,--->是不是用来创建对象用的.那么括号里的"abc"又是什么呢?---->是不是在常量池中的对象啊,
 那好,我们来看一下:new 操作应该是在heap中创建对象,"abc"应该去常量池匹配对象,然后再将内容值传递给堆内存中的对象,而现在呢,堆内存中创建好了对象,此时产生一个地址值,这个地址值是指向s2的

由此可见 
我们做如下操作判断一下真假:
sop(s1==s2);//false
sop(s1.equals(s2));//true

再说一下equals方法,其实呢,这个方法是复写了Object中的equals方法,因为equals方法是调用==方法的,当不用比较地址值的时候,只需要比较对象的内容值即可.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章