Integer大小比较问题

public static void main(String[] args) throws NoSuchFieldException,
IllegalAccessException {
Integer a = 1000, b = 1000;
System.out.println(a == b);//1
Integer c = 100, d = 100;
System.out.println(c == d);//2

System.out.println(100 == 100); // 3
System.out.println(1000 == 1000); // 4

Class cache = Integer.class.getDeclaredClasses()[0];
Field myCache = cache.getDeclaredField("cache");
myCache.setAccessible(true);

Integer[] newCache = (Integer[]) myCache.get(cache);
newCache[132] = newCache[133];

int a2 = 2;
int b2 = a2 + a2;
System.out.printf("%d + %d = %d", a2, a2, b2); // 5
}

控制台打印结果:

false
true
true
true
2 + 2 = 5

原因:对于Integer来说,-128-127之间的整型已经初始化放在IntegerCache中,如果是在这个范围内的话,其实引用的都是一个对象值,否则是不同的对象额

所以如果不在这个范围内的话,比较Integer的话,是用equals()比较了额

时间: 2024-10-20 04:05:22

Integer大小比较问题的相关文章

关于java Integer大小比较的问题

参考: http://www.blogjava.net/zhangyuan/archive/2010/07/24/327011.html http://www.wenhq.com/article/view_392.html 运行一下,在控制台得到的结果是这样的 a==b : truea.equals(b) : true 当是当我们变换一下值 运行一下,控制台的结果又是 a==b : falsea.equals(b) : true 源码——实际上在我们用Integer a = 数字:来赋值的时候I

Integer 类型比较大小

== 比较 Integer 大小 Integer n1 = 127; Integer n2 = 127; System.out.println(n1 == n2); // true System.out.println(n1.equals(n2)); // true Integer n1 = 128; Integer n2 = 128; System.out.println(n1 == n2); // false System.out.println(n1.equals(n2)); // tru

解决java中按照数字大小来排序文件

我们想要输出(1.jpg.2.jpg.3.jpg.10.jpg.11.jpg.20.jpg.21.jpg.31.jpg) 突然看到网上一些写法 总结:既然自己按照定义的文件名规则来处理,也可以进行使用正则表达,简化使用 1 File[] files = file.listFiles(); 2 if(files==null)return resultFileName; 3 List<File> fileList = new ArrayList<File>(); 4 for (File

SetWindowPos函数详解

WinAPI: SetWindowPos - 改变窗口的位置与状态 SetWindowPos(hWnd: HWND; {窗口句柄}hWndInsertAfter: HWND; {窗口的 Z 顺序}X, Y: Integer; {位置}cx, cy: Integer; {大小}uFlags: UINT {选项}): BOOL; //hWndInsertAfter 参数可选值:HWND_TOP = 0; {在前面}HWND_BOTTOM = 1; {在后面}HWND_TOPMOST = HWND(-

delphi SetWindowPos改变窗体位置和状态

http://blog.163.com/[email protected]/blog/static/1730690722012534428814/ delphi SetWindowPos改变窗体位置和状态 2012-06-03 16:04:28|  分类: 电脑|举报|字号 订阅 下载LOFTER我的照片书  | //声明:SetWindowPos(hWnd: HWND;            {窗口句柄}hWndInsertAfter: HWND; {窗口的 Z 顺序}X, Y: Intege

URAL 2029 Towers of Hanoi Strike Back 汉诺塔,从初始状态到任意给出状态需要的次数

F - Towers of Hanoi Strike Back Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice URAL 2029 Description The Tower of Hanoi puzzle was invented by French mathematician édouard Lucas in the second half

Verilog-2001新增特性

l generate语句 Verilog-2001添加了generate循环,允许产生 module和primitive的多个实例化,同时也可以产生多个variable,net,task,function,continous assignment,initial和always.在generate语句中可以引入if-else和case语句,根据条件不同产生不同的实例化. 为此,Verilog-2001还增加了以下关键字:generate,endgenerate,genvar,localparam.

《深入理解java虚拟机》读书笔记:对象的内存布局

一个int类型4占4个字节的内存,一个byte一个字节.但是他们的封装类型Integer,Byte对象内存损耗还是一样的吗?并不是,而且差距十分大. HotSpot虚拟机中,一个普通的Java对象由3部分构成 对象头 类内定义的实例数据 内存对齐 2不必多说,Java对象不存定义好的实例字段存啥. 对象头又分两部分,Mark Word和类型指针.Mark Word存储对象运行时数据,如对象的hashcode,对象的分代年龄,锁状态等等.对象的分代年龄完全是为了JVM的Young GC设计的,每经

solr配置schema.xml学习

solr创建索引.添加数据的关键是配置schema.xml文件,该文件中主要是完成配置数据源.索引字段.数据类型等定义.同时,该文件的配置直接影响到solr搜索的效率和准确性. 一.搜索类型FileType name:指的是FileType的名字 class:指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为 <types> <fieldType name="string" class="solr.StrF