一.
对于字符串内存进行一个剖析。
现在介绍一个方法,一会儿要用到,但是实际开发并不多见。
intern()可以对常量池进行操作,
s1是个对象,接着用s1对象去调用操作常量池中的方法,调用这个方法返回了池子中的对象。
接着进行对比,s1==s2么?结果是false,跟下图中的写法是一回事。
这里的s1是堆里面的一个对象,我这对象到池子里面去找寻了,池子里没有,然后就在池子里建了一个返回去了。
池子里有就拿回来用,没有就创建一个返回来。
(eclipse看源码,将光标放置在String上,按一下f3直接切换到string.class这个源文件上。按住ctrl,用鼠标对着string,出现两个选项,一个是解释,另一个是实现。点击解释即可)
对于String s1=new String("abc");怎么理解?这里new的是两个对象,"abc"字符串对象是在堆内存中的对象中维护的。而s1.intern是获取池中的数据。池中的数据是共享数据。