018Java面试002String常量池
2021/12/6 11:46:42
本文主要是介绍018Java面试002String常量池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 对象生成个数
测试代码如下:
1 public static void main(String[] args) throws Exception { 2 String s1 = new String("abc"); 3 String s2 = "abc"; 4 String s3 = new String("abc"); 5 System.out.println(s1 == s2);// false 6 System.out.println(s1 == s3);// false 7 System.out.println(s2 == s3);// false 8 }
上述代码执行后,在常量池中生成了一个对象,在堆中生成了两个对象(指向常量池中的对象)。
s1先在堆中创建了一个对象,然后在常量池中寻找字符串,没有找到则在常量池中创建一个对象,堆中保存常量池中对象的引用。
s2先在常量池中寻找字符串,找到了则返回常量池中对象的引用。
s3先在堆中创建了一个对象,然后在常量池中寻找字符串,找到了则返回常量池中对象的引用,堆中保存常量池中对象的引用。
2 对象创建机制
测试代码如下:
1 public static void main(String[] args) throws Exception { 2 String s1 = "java"; 3 String s2 = "ja"; 4 String s3 = "va"; 5 System.out.println(s1 == "java");// true 6 System.out.println(s1 == (s2 + s3));// false 7 System.out.println(s1 == "ja" + s3);// false 8 System.out.println((s2 + s3) == (s2 + s3));// false 9 }
上述代码执行后,在常量池中生成了三个对象,在堆中生成了四个对象(指向常量池中的对象)。
s1先在常量池中寻找字符串,没有找到则在常量池中创建一个对象,返回常量池中对象的引用。
s2先在常量池中寻找字符串,没有找到则在常量池中创建一个对象,返回常量池中对象的引用。
s3先在常量池中寻找字符串,没有找到则在常量池中创建一个对象,返回常量池中对象的引用。
字符串在拼接时,先在堆中创建了一个对象,然后在常量池中寻找字符串,找到了则返回常量池中对象的引用,堆中保存常量池中对象的引用。
这篇关于018Java面试002String常量池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?