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

String s="a"

String s1="a"

s==s1   //true

为什么a==b?

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

也可以总结出==比较的应该是引用指向的地址的值,而不是引用本身。

 

String s="a"

String s1 = new String("s");

s == s1 //false

为什么a == b 为false

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

 

String s="a"

String s1 = new String("s");

s == s1.intern() //true

inter()方法的作用

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

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

如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇