在 Java 中,对于整数值在 -128 ~ 127 范围内的 Integer 对象,会事先创建好放入缓存池中,以便重复利用超出范围的是不是每次创建同一个地址会不相同
时间: 2024-02-19 21:00:49 浏览: 24
在 Java 中,对于整数值在 -128 ~ 127 范围外的 Integer 对象,每次创建都会创建一个新的对象,所以它们的地址不同。而对于整数值在 -128 ~ 127 范围内的 Integer 对象,则会重复利用缓存池中已经创建好的对象,所以它们的地址是相同的。这种缓存机制可以提高性能并节省内存空间,但是需要注意的是,如果对这些对象进行修改,就会影响到其他使用相同对象的地方,因此在实际开发中应该尽量避免修改这些对象。
相关问题
Integer 对象是不变对象 这里的对象是先创建后再保存在缓存区还是已经创建好的
Integer 对象是已经创建好的对象,而且是缓存池中预先创建好的。在 Java 中,对于整数值在 -128 ~ 127 范围内的 Integer 对象,会事先创建好放入缓存池中,以便重复利用,可以提高性能并节省内存空间。如果需要创建的整数值在这个范围内,会直接从缓存池中获取已经创建好的 Integer 对象,否则就会创建新的 Integer 对象。因此,Integer 对象是不可变的,它们的值在创建后不可改变,如果需要改变值,就需要创建一个新的 Integer 对象。
为什么Integer 要将 -127 ~ 128 缓存起来 ?
在Java中,对于基本数据类型的包装类,比如Integer、Byte、Short等,为了提高性能,JVM使用了缓存技术。其中,Integer类有一个内部静态类IntegerCache,它缓存了-128到127之间的所有整数对象,所以在使用这些整数时,会直接返回缓存中的对象,而不是创建新的对象。
这样做的好处是可以减少对象的创建,提高程序的运行效率。另外,因为这些整数对象是不可变的,所以多个线程可以共享这些对象,从而提高内存利用率。
需要注意的是,这个缓存的范围可以通过`-XX:AutoBoxCacheMax=<size>`参数来控制,其中`<size>`表示缓存的最大值。如果超过了这个范围,就会创建新的对象。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)