常量池的理解,8个包装类和String和其他类生成对象的不同之处

一、常量池的理解

常量池是一块特殊的内存区域,用于存储编译器确定的各种字面量和符号引用。他可以分为以下几种:

1.字符串常量池:

字符串常量池用于存储字符串字面量。例如,当在代码中出现多个相同的字符串字面量时,实际上在字符串常量池中只有一份实例,多个引用指向同一个字符串对象。这可以节省内存空间,避免重复创建相同的字符串对象。
在 Java 中,可以通过使用intern()方法来将一个字符串对象放入字符串常量池,并返回该字符串在常量池中的引用。
类常量池:
存放编译时期生成的各种字面量和符号引用,包括类名、方法名、字段名等。在类加载过程中,这些符号引用会被解析为实际的内存地址。

二、8 个包装类和 String 类与其他类生成对象的不同之处

8 个包装类(Byte、Short、Integer、Long、Float、Double、Character、Boolean):
对于整数类型的包装类(Byte、Short、Integer、Long),在一定范围内(-128 到 127)的值,Java 会自动进行缓存。如果通过自动装箱(如Integer i = 10;)创建的对象在这个范围内,那么会从缓存中获取已经存在的对象,而不是创建新的对象。这样可以提高性能和节省内存。
对于浮点数类型的包装类(Float、Double)和字符类型的包装类(Character)以及布尔类型的包装类(Boolean),没有类似的自动缓存机制。
包装类可以通过自动装箱和自动拆箱方便地在基本数据类型和对象之间进行转换。
String 类:
String 类的对象一旦创建,其内容不可改变。如果尝试修改字符串内容,实际上会创建一个新的字符串对象。
如上文提到的,字符串常量池会对相同的字符串字面量进行缓存,减少内存开销。
可以通过使用new关键字和字符串字面量两种方式创建字符串对象。使用new关键字会在堆上创建一个新的对象,而直接使用字符串字面量时,如果常量池中已经存在相同的字符串,则直接返回常量池中的引用;如果不存在,则在常量池中创建并返回引用。

与其他普通类相比,8 个包装类和 String 类在对象创建和管理方面具有一些特殊的机制,这些机制主要是为了提高性能、节省内存以及方便使用。而普通类在创建对象时通常是通过new关键字在堆上分配新的内存空间,并且没有类似的缓存或常量池机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值