public static void main(String[] args) {
Integer a=200;
Integer b=200;
System.err.println(a==b);
}
一般人会肯定的说结果是false。因为Integer 的缓存范围是-128至127.
但其实127这个数字是可以认为改变的(当然改变的值也不能小于127):
-Djava.lang.Integer.IntegerCache.high=250
当改成250的时候,结果是true了。
对应的jdk的源码:
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
}
high = h;
分享到:
相关推荐
项目里遇到的小问题的 整理
【Integer缓存池案例1】 在Java编程中,Integer对象的使用涉及到缓存池的概念。Integer类在JDK中提供了缓存机制,用于优化Integer对象的创建和使用,特别是对于小数值。当我们在程序中创建Integer对象时,如果值在-...
在 Java 中,Integer 对象在 -128 到 127 之间的值是缓存的,这意味着在这个范围内的所有 Integer 对象都是同一个对象引用。因此,当我们创建两个 Integer 对象,并将它们的值设置在这个范围内时,它们将引用的是同...
这个方法通常在你需要使用`Integer`对象的特性(如缓存、比较操作或泛型方法参数)时使用。 在面试或笔试题中,如题目所示,`a = Integer.parseInt("123")`会将字符串"123"解析为`int`类型的值,并赋给变量a,所以a...
在缓存和常量池方面,`Integer`类提供了一个缓存机制,用于存储-128到127之间的整数值。这意味着在这个范围内创建`Integer`对象时,如果已有相同的值存在,就会复用已存在的对象,避免了重复的内存分配。这个特性在...
需要注意的是,当进行`Integer`之间的比较时,如果值在-128到127之间,Java会使用缓存来提高性能,因此比较速度较快。但超出这个范围,每个`Integer`对象都是独一无二的,即使值相同,`==`比较也会返回`false`,此时...
例如,`setServers(String[] servers)`用于设置服务器列表,而`setWeights(Integer[] weights)`用于设置每个服务器的权重,这在负载均衡中非常重要。 - `setInitConn(int initConn)`: 设置每个服务器的初始连接数,...
随手写了一个TreeNode,顺道实现了个对应的内存缓存框架,适用于数据量不大,更新也少但是反复要读的数据,比如模块信息/组织结构/频道栏目/权限等。 PS:Java是可以直接操作内存的,只是现在的框架整合让人退化了。...
在Java中,享元模式在Integer和String类中有显著的应用。 首先,我们来看Integer类。在Java中,基本数据类型int的封装类是Integer。在某些情况下,我们可能需要将int转换为Integer对象,这个过程称为自动装箱。反之...
`这行代码中,由于110在Integer缓存的范围内(-128到127),所以Integer#valueOf(int i)方法会从缓存中获取已经存在的110对应的Integer对象,因此a和b指向的是同一个对象,`a == b`的结果为`true`。 而在`Integer c...
3. `setWeights(Integer[] weights)`: 设置各个服务器的权重,权重对应于服务器列表的位置,用于分配不同的访问优先级。 4. `setInitConn(int initConn)`, `setMinConn(int minConn)`, `setMaxConn(int maxConn)`: ...
在Java 8中,Integer缓存池的大小默认为-128到127,这个范围可以通过系统属性"java.lang.Integer.IntegerCache.high"进行调整。 ```java public static Integer valueOf(int i) { if (i >= IntegerCache.low && i ...
Java中的Integer和Long类型都有缓存机制,在一定范围内的值会被缓存,以提高性能。 知识点8:自动拆箱和装箱的应用 自动拆箱和装箱机制可以使我们的代码更加简洁和高效,但是需要注意其使用场景,以避免出现意外的...
Java Integer.ValueOf()的一些了解 在Java中,Integer.ValueOf()方法是一个非常重要的方法,它可以将整数类型的值转换为Integer对象。下面我们就来详细了解一下这个方法的实现原理和使用方式。 首先,让我们来看...
7. **缓存**:`Integer` 类有一个内置的缓存,用于存储-128到127之间的值。这意味着对于这个范围内的 `Integer` 实例,多次创建相同的值会复用同一个对象,而不会创建新的对象。 8. **可为空**:`Integer` 可以为 `...
本文将深入探讨Java整型数与Integer的缓存机制,以帮助开发者更好地理解和使用这两种类型。 首先,`int`是Java的基本数据类型之一,它在内存中直接存储数值,没有额外的对象开销。而`Integer`是`int`的封装类,它是...
总之,理解Java中的Integer装箱细节和其背后的缓存机制对于编写高性能的Java代码至关重要。在处理Integer对象时,特别是涉及到对象比较时,要考虑到这个缓存范围,以避免出现意外的结果。在大量创建Integer对象的...
首先,Integer 对象在 Java 中的缓存机制,-128 到 127 之间的整型已经初始化放在 IntegerCache 中,如果是装箱的话,就会从这里面取对象。这意味着,如果你创建了两个 Integer 对象,值相同,那么他们可能是同一个...
Java Integer.valueOf()和Integer.parseInt()的区别说明 Java 中的 Integer 类中有两个静态方法,Integer.valueOf(String s) 和 Integer.parseInt(String s),它们都可以将字符串转换为整型,但它们之间有着很大的...
### 更简单的Java缓存框架 jscache #### 知识点概述 jscache是一个轻量级、易用的Java缓存框架,它基于面向切面编程(AOP)原理实现,支持灵活配置缓存策略,并提供了多种缓存实现方式。通过使用jscache,开发者...