Java基础回顾 : String类的内存分析
2016-05-23 16:20
330 查看
String类的内存分析:
在Java之中有一种称为共享设计模式的概念.在JVM的底层会存在有一个对象池,在对象池之中会保留有已经开辟空间的对象,那么String就是利用了对象池的概念,当利用直接赋值的形式定义一个字符串时,第一次会开辟新的堆内存空间,但是随后会将此对象保存在池之中,如果下次同样使用直接赋值的形式,那么会直接取出对象池中保存的对象继续使用,并且不会开辟新的内存空间.
String类对象两种实例化的区别?
1.构造方法:会产生两块内存空间,其中一块将成为垃圾,并且不会自动入池保存,用记可以通过intern()方法手工入池;
2.直接赋值:只会产生一块堆内存空间,可以自动入池保存.
★ . 另外需要说明的是,当字符串一旦声明之后,那么字符串的内容是不可能被改变的.当我们使用字符串连接符("+")进行操作时,改变的不是字符串本身,只是对字符串进行了重新组合生成新的字符串,新的字符串内存地址和原来的内存地址不同.改变的只是指向的内存地址.
在Java之中有一种称为共享设计模式的概念.在JVM的底层会存在有一个对象池,在对象池之中会保留有已经开辟空间的对象,那么String就是利用了对象池的概念,当利用直接赋值的形式定义一个字符串时,第一次会开辟新的堆内存空间,但是随后会将此对象保存在池之中,如果下次同样使用直接赋值的形式,那么会直接取出对象池中保存的对象继续使用,并且不会开辟新的内存空间.
String str1 = "Hello"; String str2 = "Hello"; String str3 = "Hello";
String类对象两种实例化的区别?
1.构造方法:会产生两块内存空间,其中一块将成为垃圾,并且不会自动入池保存,用记可以通过intern()方法手工入池;
2.直接赋值:只会产生一块堆内存空间,可以自动入池保存.
String str = new String("Hello");
★ . 另外需要说明的是,当字符串一旦声明之后,那么字符串的内容是不可能被改变的.当我们使用字符串连接符("+")进行操作时,改变的不是字符串本身,只是对字符串进行了重新组合生成新的字符串,新的字符串内存地址和原来的内存地址不同.改变的只是指向的内存地址.
相关文章推荐
- 监听器使用spring的bean
- spring整合hibernate
- 【转载】C#之int与Java之Integer的区别
- Java 静态方法和实例化方法的区别
- Java 静态方法和实例化方法的区别
- java中文乱码解决之道(8):解决URL中文乱码问题
- Java常用类库初识
- java中文乱码解决之道(6):javaWeb中的编码解码的
- java单例模式深度解析
- java 利用Runtime.getRuntime().exec()代码调用服务器执行命令
- 正则表达式工具类,正则表达式封装,Java正则表达式
- Spring MVC示例及常用注解(一)
- JAVA多线程(四)多线程数据共享
- 基于MVC的应用框架之Struts前奏
- SM整合出错:ClassCastException: tk.licer.model.Role_$$_javassist_0 cannot be cast to javassist.util.proxy
- java跳出多重嵌套循环
- SPRING中的线程池ThreadPoolTaskExecutor
- java之Date
- Java实现插入排序
- 学习总结 java 父子级