赞
踩
本文基于java8 内存结构图
String 类是由 final 修饰的类 , 不可以被改变 (继承)
java中创建字符串的方式有几种? 区别所占用的空间不同
String 类的常用构造器:
new String() 动作
享元模式的注意事项和细节
String 常量池使用到了享元设计模式的思想,
特殊的是:String 常量池是可以扩容的
JVM 底层实际上会自动维护一个对象池(字符串对象池,对象数组),目的就是减少开销
前提条件一样是当你声明了一个变量且想要让这个变量成为一个 String 类对象的引用时,
若是静态赋值,String 类优先从常量池中寻找对象
若是找到,那么直接将这个对象的地址返回变量;
没找到就在常量池创建对象,然后再将这个对象的地址返回变量。
所以 String 类的静态赋值的对象地址永远在常量池中
若是 new 语句赋值,
使用String构造方法就会开辟两块堆内存空间,并且其中一块堆内存将成为垃圾空间。除了这一缺点之外,也会对字符串共享产生问题
在 String 类中提供有方法入池操作 public String intern() ;
直接赋值: 只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用
构造方法: 会开辟两块堆内存空间,其中一块称为垃圾空间,不会自动保存在对象池中,可以使用 Intern() 方法手工入池
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。