Java基础原理
栈区存引用和基本类型,不能存对象,而堆区存对象。==是比较地址,equals()比较对象内容。
String是char[] 数组。
String的值是不可变的,String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。
String值是不可变的,从这句话看来,String是个线程安全的
String str1 = “ABC”;可能创建一个或者不创建对象,如果”ABC”这个字符串在java String池里不存在,会在java String池里创建一个创建一个String对象(“ABC”),然后str1指向这个内存地址,无论以后用这种方式创建多少个值为”ABC”的字符串对象,始终只有一个内存地址被分配,之后的都是String的拷贝,Java中称为“字符串驻留”,所有的字符串常量都会在编译之后自动地驻留。
String str2 = new String(“ABC”);至少创建一个对象,也可能两个。因为用到new关键字,肯定会在heap中创建一个str2的String对象,它的value是“ABC”。同时如果这个字符串再java String池里不存在,会在java池里创建这个String对象“ABC”。
在JVM里,考虑到垃圾回收(Garbage Collection)的方便,将heap(堆)划分为三部分:young generation(新生代)、tenured generation (old generation)(老年代)、permanent generation(永久代)。
字符串为了解决字符串重复问题,生命周期长,存于pergmen中。
JVM中,相应的类被加载运行后,常量池对应的映射到JVM运行时的常量池中。
博主QQ交流群:Java技术|SpringCloud交流群 413531925