个人理解,不当之处请指正

String s="字符串"

String s1="字符串"

s==s1   //true

为什么s==s1?

使用""符号创建的字符串对象时jvm会在方法区的常量池中查找是否存在“字符串1”,没有就在方法区中的常量池中开辟一块空间存放字符串a并将引用s指向该地址,有的话则将引用直接指向该地址。

也可以总结出== 是判断两个变量是否指向同一个地方,即存储位置,也就是说是否引用同一个变量

 

String s="字符串1"

String s1 = new String("字符串2");

s == s1 //false

为什么s == s1 为false

使用new 创建对象的实例在堆中,也就是说引用指向的是堆的地址。要注意的是括号里的"s",实际这里已经完成了上面所说的动作(在常量池中存放了一份),并在这之后又在堆中创建了一份。

 

String s="a"

String s1 = new String("s");

s == s1.intern() //true

inter()方法的作用

inter()是一个本地方法,无法从源码中看出他的作用,所以查了一下资料,总结了一下jvm会从常量池中找到是否存在与该引用指向值相等的值,没有则在常量池中创建有则拿到该值引用地址返回。

Rick  514浏览  0评论  2020-09-17

上一篇