String创建剖析
- 创建String对象的方式
- 1、直接赋值 String s = “hsp”;
- 先从常量池查看是否有“hsp”数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址。
- 2、调用构造器 String s.2= new String(“hsp”);
- 现在堆中创建空间,里面维护类value属性,指向常量池的hsp空间。如果常量池没有“hsp”,重新创建,如果有,直接通过value指向,最终指向的是堆中的空间地址
- 1、直接赋值 String s = “hsp”;
- 两种方式的内存分布图
测试题
- 1
- 2
System.out.println(a.equals(b)); 最终指向的是堆中空间的地址
- 3
- 4
- 5(考功力)
System.out.println(p1.name = “hspedu”;“hspedu”是final类型的,因此地址和p1.name是常量池中的同一个