`

Java的Integer是由缓存决定的,我们可以改变缓存来改变Integer

 
阅读更多

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
0
0
分享到:
评论
3 楼 huangyunbin 2015-01-26  
1927105 写道
额,你改默认缓存做什么?

文章地址是:http://www.4byte.cn/learning/84945/wei-ni-de-jvm-zeng-jia-yi-xie.html
2 楼 huangyunbin 2015-01-26  
1927105 写道
额,你改默认缓存做什么?

其实我是看了这篇文章,但是我没有完全理解这个文章中的熵表达的是什么意思。但是觉得他改缓存这个还是很有意思的
1 楼 1927105 2015-01-25  
额,你改默认缓存做什么?

相关推荐

    Java Integer的缓存特性

    项目里遇到的小问题的 整理

    Integer缓存池案例1

    【Integer缓存池案例1】 在Java编程中,Integer对象的使用涉及到缓存池的概念。Integer类在JDK中提供了缓存机制,用于优化Integer对象的创建和使用,特别是对于小数值。当我们在程序中创建Integer对象时,如果值在-...

    JAVA Integer == equal 比较 doc 比较大小 是否相等

    Integer 对象可以通过自动装箱(autoboxing)或手动创建来获得。自动装箱是指 Java 编译器在编译时将基本类型 int 转换为 Integer 对象的过程。 使用 "==" 运算符比较 Integer 对象 在 Java 中,"==" 运算符用于...

    Integer类的缓存机制

    `这行代码中,由于110在Integer缓存的范围内(-128到127),所以Integer#valueOf(int i)方法会从缓存中获取已经存在的110对应的Integer对象,因此a和b指向的是同一个对象,`a == b`的结果为`true`。 而在`Integer c...

    JAVA-int和Integer的区别1.zip

    在Java编程语言中,`int`和`Integer`都是用于表示整数值的数据类型,但它们之间存在着显著的差异。理解这些区别对于编写高效且优化的Java代码至关重要。 首先,`int`是Java中的原始数据类型之一,它直接存储在栈...

    JAVA-int和Integer的区别

    需要注意的是,当进行`Integer`之间的比较时,如果值在-128到127之间,Java会使用缓存来提高性能,因此比较速度较快。但超出这个范围,每个`Integer`对象都是独一无二的,即使值相同,`==`比较也会返回`false`,此时...

    Java实现的树以及包含树的内存缓存框架

    PS:Java是可以直接操作内存的,只是现在的框架整合让人退化了。不要迷信redis,现在webserver本身的内存也很大的,充分利用嘛。 怎么用?参考下面的代码。 treeCacher = new TreeCacher&lt;Integer, SysModule&gt;(new ...

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...

    Java中Integer两种转int方法比较

    首先,我们来看`Integer.parseInt()`方法。这个方法接受一个字符串参数,解析该字符串并返回一个`int`类型的值。例如,`Integer.parseInt("123")`将返回整数123。需要注意的是,如果字符串不能被解析为有效的整数...

    55丨享元模式(下):剖析享元模式在JavaInteger、String中的应用1

    当我们在-128到127这个范围内的值创建Integer对象时,Java会使用享元模式来复用已存在的对象。这是因为Integer类内部有一个缓存池,即IntegerCache,它预先创建了-128到127之间的所有Integer对象。当我们调用valueOf...

    java 整型数与Integer的缓存深入理解

    在编写涉及大量Integer对象操作的代码时,可以考虑使用这个缓存机制来避免不必要的对象创建。此外,在比较Integer对象时,如果目的是比较其值,应使用`equals()`方法而不是`==`,因为`==`比较的是对象的引用,而`...

    细数java中Long与Integer比较容易犯的错误总结.docx

    ### Java中Long与Integer比较易犯错误总结 ...通过以上的讨论,我们可以看到,在Java中正确处理`Long`和`Integer`的比较是非常必要的。遵循最佳实践,可以有效地避免潜在的错误,并提高程序的健壮性和效率。

    java中Integer包装类装箱的一个细节详解

    这个缓存大小可以通过JVM的启动参数`-Djava.lang.Integer.IntegerCache.high`来调整。默认值是127,但可以通过设置这个参数来扩大或缩小范围,不过设置的值必须大于127,否则会被重置为127以确保缓存有效。 总之,...

    Java实现简单LRU缓存机制的方法

    Java实现简单LRU缓存机制的方法是指通过Java语言实现的一种缓存机制,该机制可以根据最近最少使用的原则淘汰缓存中的数据。缓存机制的实现主要是通过哈希表和双向链表来实现的。 一、什么是LRU算法? LRU算法是一...

    Java int与integer的对比区别

    在Java编程语言中,`int` 和 `Integer` 都是用来表示整数的,但它们在性质和使用场景上有着显著的区别。理解这两者之间的差异对于编写高效且符合Java语法规则的代码至关重要。 首先,`int` 是Java中的一个基本数据...

    Java Integer.ValueOf()的一些了解

    从源码中我们可以看到,Integer.ValueOf()方法首先判断传入的整数值是否在-128到127之间,如果在这个范围内,就从IntegerCache中取出对应的缓存对象返回,否则就创建一个新的Integer对象。 那么,IntegerCache是...

    Java基础之Integer使用的注意事项及面试题

    例如,在上面的代码中,我们可以看到,a1 和 b1 是同一个对象,因为它们的值都是 100,而 100 是在 IntegerCache 中的缓存对象。因此,修改 a1 的值时,b1 的值也会被修改。 public static void main(String[] args...

    JAVA中Integer值的范围实例代码

    让我们来看一看 Java 的源代码,在 `Integer` 类中,有一个 `valueOf` 方法: ```java public static Integer valueOf(int i) { final int offset = 128; if (i &gt;= -128 && i ) { return IntegerCache.cache[i +...

    更简单的Java缓存框架 jscache.docx

    4. **`argCondition`**:前置条件过滤器,用于根据方法的输入参数来决定是否执行缓存逻辑。这有助于进一步优化缓存命中率,减少不必要的缓存操作。 5. **`returnCondition`**:后置条件过滤器,只在前置条件满足的...

Global site tag (gtag.js) - Google Analytics