极客996

极客996

  • 8文章
  • 1评论
  • 220文章浏览

String到底是在堆中还是在方法区中?

个人理解,不当之处请指正 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  2020-09-17 阅读全文

String到底是在堆中还是在方法区中?

个人理解,不当之处请指正 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  2020-09-17 阅读全文

堆区和非堆区

1.heap区又分为: - Eden Space(伊甸园)、 - Survivor Space(幸存者区)、 - Old Gen(老年代)。 2.非heap区又分: - Code Cache(代码缓存区); - Perm Gen(永久代); - Jvm Stack(java虚拟机栈); - Local Method Statck(本地方法栈);

Rick  2020-09-15 阅读全文

Java面试题

1.HashMap实现原理

Rick  2020-09-15 阅读全文

极客996

  • 8文章
  • 1评论
  • 220文章浏览
音乐推荐
热门文章
SSR免费节点———不定时更新
2020-09-04   104
且看且行,人微言轻。
2020-09-04   41
小白图解TCP建立连接(三次握手)到关闭连接全过程(四次挥手)
2020-09-05   40
堆区和非堆区
2020-09-15   9
为什么 HashMap中的hashTabel的长度要设置成2^n?
2020-09-16   8
Google广告