网站策划过程,网站设计用什么软件做的,专业设计vi公司,wordpress 删除仪表盘作者主页#xff1a;paper jie_博客 本文作者#xff1a;大家好#xff0c;我是paper jie#xff0c;感谢你阅读本文#xff0c;欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏#xff0c;本专栏是针对于大学生#xff0c;编程小白精心打造的。笔者用重金(时间和精力… 作者主页paper jie_博客 本文作者大家好我是paper jie感谢你阅读本文欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏本专栏是针对于大学生编程小白精心打造的。笔者用重金(时间和精力)打造将javaSE基础知识一网打尽希望可以帮到读者们哦。 其他专栏《算法详解》《C语言》《javaSE》等 内容分享本期将会分享java数据结构中的String对象创建的深入探索 目录
创建对象内的“那些事”
字符串常量池
对String对象创建的具体分析
直接使用字符串常量进行赋值
通过new创建String对象
intern方法 创建对象内的“那些事”
话不多说直接上代码
public static void main(String[] args) {String s1 hello;String s2 hello;String s3 new String(hello);String s4 new String(hello);System.out.println(s1 s2); // trueSystem.out.println(s1 s3); // falseSystem.out.println(s3 s4); // false
} 上面这个代码我们发现创建的String对象的方式类似但是结果s1和s2是同一个对象但s3和s4却却不是
这就是要深究到java中的常量池了。在java中“hello”“1234”等常量经常被频繁使用java为了让程序运行的速度更加快跟节省内存就为8种基本类型和String类提供了常量池。
java中引入了
Class文件常量池每个Java源文件编译后生成的.Class文件中会保存当前类中的字面常量以及符号信息
运行时常量池在.Class文件被加载时Class文件中的常量池被加载到内存中称为运行时常量池运行时常量池每个类都会有一份
池 是编程中的一种常见的, 重要的提升效率的方式, 我们会在遇到各种 内存池, 线程池, 数据库连接池
字符串常量池
字符串常量池在JVM中是一个StringTable类实际是一固定大小的HashTable它是一种高效查找的数据结构在不同的JDK版本下字符串常量池的位置以及默认大小是不同的 对String对象创建的具体分析
直接使用字符串常量进行赋值
public static void main(String[] args) {String str1 hello;String str2 hello;System.out.println(str1 str2);} 这里直接通过画图分析 通过new创建String对象
public static void main(String[] args) {String str1 new String(hello);String str2 hello;System.out.println(str1 str2);} 这里我们得到一个结论只要是new出来的对象就是唯一的
这里我们可以知道使用常量串创建String类型对象的效率更高更节省空间。用户也可以将创建的字符串对象通过intern方式添加进字符串常量池中
intern方法
intern方法的作用就是将创建的String对象添加到常量池中、
public static void main(String[] args) {char[] ch new char[]{a, b, c};String s1 new String(ch); // s1对象并不在常量池中//s1.intern(); 调用之后会将s1对象的引用放入到常量池中String s2 abc; // abc 在常量池中存在了s2创建时直接用常量池中abc的引用System.out.println(s1 s2);
}
放开前返回的是false放开后返回true 使用方法前常量池中没有“abc”导致str2自己重新创建了一份abc“”
使用方法后常量池中有了“abc”str2直接拿过来用就可以了