import java.lang.reflect.Field;
import java.util.Random;
public class IntegerTest {
public static void main(String[] args) throws Exception {
Class<?> clazz = Class.forName("java.lang.Integer$IntegerCache");
Field field = clazz.getDeclaredField("cache");
field.setAccessible(true);
Integer[] cache = (Integer[]) field.get(clazz);
// 改变Integer的缓存
for (int i = 0; i < cache.length; i++) {
cache[i] = new Integer(new Random().nextInt(cache.length));
}
for (int i = 0; i < 10; i++) {
System.out.println((Integer) i); // 这个时候1不是1 ,2也不是2
}
}
}
我本地的打印结果是:
254
12
42
39
216
102
20
140
75
119
分享到:
相关推荐
项目里遇到的小问题的 整理
【Integer缓存池案例1】 在Java编程中,Integer对象的使用涉及到缓存池的概念。Integer类在JDK中提供了缓存机制,用于优化Integer对象的创建和使用,特别是对于小数值。当我们在程序中创建Integer对象时,如果值在-...
Integer 对象可以通过自动装箱(autoboxing)或手动创建来获得。自动装箱是指 Java 编译器在编译时将基本类型 int 转换为 Integer 对象的过程。 使用 "==" 运算符比较 Integer 对象 在 Java 中,"==" 运算符用于...
`这行代码中,由于110在Integer缓存的范围内(-128到127),所以Integer#valueOf(int i)方法会从缓存中获取已经存在的110对应的Integer对象,因此a和b指向的是同一个对象,`a == b`的结果为`true`。 而在`Integer c...
在Java编程语言中,`int`和`Integer`都是用于表示整数值的数据类型,但它们之间存在着显著的差异。理解这些区别对于编写高效且优化的Java代码至关重要。 首先,`int`是Java中的原始数据类型之一,它直接存储在栈...
需要注意的是,当进行`Integer`之间的比较时,如果值在-128到127之间,Java会使用缓存来提高性能,因此比较速度较快。但超出这个范围,每个`Integer`对象都是独一无二的,即使值相同,`==`比较也会返回`false`,此时...
PS:Java是可以直接操作内存的,只是现在的框架整合让人退化了。不要迷信redis,现在webserver本身的内存也很大的,充分利用嘛。 怎么用?参考下面的代码。 treeCacher = new TreeCacher<Integer, SysModule>(new ...
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...
首先,我们来看`Integer.parseInt()`方法。这个方法接受一个字符串参数,解析该字符串并返回一个`int`类型的值。例如,`Integer.parseInt("123")`将返回整数123。需要注意的是,如果字符串不能被解析为有效的整数...
当我们在-128到127这个范围内的值创建Integer对象时,Java会使用享元模式来复用已存在的对象。这是因为Integer类内部有一个缓存池,即IntegerCache,它预先创建了-128到127之间的所有Integer对象。当我们调用valueOf...
在编写涉及大量Integer对象操作的代码时,可以考虑使用这个缓存机制来避免不必要的对象创建。此外,在比较Integer对象时,如果目的是比较其值,应使用`equals()`方法而不是`==`,因为`==`比较的是对象的引用,而`...
### Java中Long与Integer比较易犯错误总结 ...通过以上的讨论,我们可以看到,在Java中正确处理`Long`和`Integer`的比较是非常必要的。遵循最佳实践,可以有效地避免潜在的错误,并提高程序的健壮性和效率。
这个缓存大小可以通过JVM的启动参数`-Djava.lang.Integer.IntegerCache.high`来调整。默认值是127,但可以通过设置这个参数来扩大或缩小范围,不过设置的值必须大于127,否则会被重置为127以确保缓存有效。 总之,...
Java实现简单LRU缓存机制的方法是指通过Java语言实现的一种缓存机制,该机制可以根据最近最少使用的原则淘汰缓存中的数据。缓存机制的实现主要是通过哈希表和双向链表来实现的。 一、什么是LRU算法? LRU算法是一...
在Java编程语言中,`int` 和 `Integer` 都是用来表示整数的,但它们在性质和使用场景上有着显著的区别。理解这两者之间的差异对于编写高效且符合Java语法规则的代码至关重要。 首先,`int` 是Java中的一个基本数据...
从源码中我们可以看到,Integer.ValueOf()方法首先判断传入的整数值是否在-128到127之间,如果在这个范围内,就从IntegerCache中取出对应的缓存对象返回,否则就创建一个新的Integer对象。 那么,IntegerCache是...
例如,在上面的代码中,我们可以看到,a1 和 b1 是同一个对象,因为它们的值都是 100,而 100 是在 IntegerCache 中的缓存对象。因此,修改 a1 的值时,b1 的值也会被修改。 public static void main(String[] args...
让我们来看一看 Java 的源代码,在 `Integer` 类中,有一个 `valueOf` 方法: ```java public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i ) { return IntegerCache.cache[i +...
4. **`argCondition`**:前置条件过滤器,用于根据方法的输入参数来决定是否执行缓存逻辑。这有助于进一步优化缓存命中率,减少不必要的缓存操作。 5. **`returnCondition`**:后置条件过滤器,只在前置条件满足的...