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

来源:互联网 发布:淘宝到家是干嘛的 编辑:程序博客网 时间:2024/05/16 19:49

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方法是调用==方法的,当不用比较地址值的时候,只需要比较对象的内容值即可.

0 0
原创粉丝点击