int、integer比较。。。。
来源:互联网 发布:php 上传工具 编辑:程序博客网 时间:2024/06/03 22:32
第一次写这个东东。麻蛋。。。。编辑器都还不会用。
1. a==c输出结果为true, ,因为Integer和int比都会自动拆箱(jdk1.5以上)
2.a==b输出结果为false,这应该好理解了,和String一样,在内存中的对象不一样,输出结果为false.
3.f1==f2输出结果为true而f3==f4结果为false,在于java在编译代码的时候会把integer i = 1(或者integer i = new integer(1))翻译成integer i = integer.valueof(1);所以关键在于valueof()函数,下面是valueof()函数的源代码(jkd 1.8):
IntegerCache类:
看一下源码大家都会明白,对于-128到127之间的数,integer在new时会进行缓存,当integer f1 = 100时,会进行缓存,下次再写integer f2 = 100时会直接从缓存中取,就不会new一个对象出来了,所以f1==f2为true,f3==f4为false.
。。。。。。
今天突然在一个群里面看到这个问题。 几个print结果:
public static void main(String[] args) {Integer a = new Integer(1);int c = 1;Integer b = 1;System.out.println(a == c); // trueSystem.out.println(a == b); // falseInteger f1 = 100, f2 = 100, f3 = 150, f4 = 150;System.out.println(f1 == f2); // trueSystem.out.println(f3 == f4); // false}
1. a==c输出结果为true, ,因为Integer和int比都会自动拆箱(jdk1.5以上)
2.a==b输出结果为false,这应该好理解了,和String一样,在内存中的对象不一样,输出结果为false.
3.f1==f2输出结果为true而f3==f4结果为false,在于java在编译代码的时候会把integer i = 1(或者integer i = new integer(1))翻译成integer i = integer.valueof(1);所以关键在于valueof()函数,下面是valueof()函数的源代码(jkd 1.8):
/** * Returns an {@code Integer} instance representing the specified * {@code int} value. If a new {@code Integer} instance is not * required, this method should generally be used in preference to * the constructor {@link #Integer(int)}, as this method is likely * to yield significantly better space and time performance by * caching frequently requested values. * * This method will always cache values in the range -128 to 127, * inclusive, and may cache other values outside of this range. * * @param i an {@code int} value. * @return an {@code Integer} instance representing {@code i}. * @since 1.5 */ public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
IntegerCache类:
private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; 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) { try { 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); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} }
看一下源码大家都会明白,对于-128到127之间的数,integer在new时会进行缓存,当integer f1 = 100时,会进行缓存,下次再写integer f2 = 100时会直接从缓存中取,就不会new一个对象出来了,所以f1==f2为true,f3==f4为false.
。。。。。。
0 0
- int 和 integer 比较
- Integer与int比较
- Integer int 比较
- int Integer 区别比较
- int、integer比较。。。。
- Integer与Int比较
- Integer与int比较
- Integer与int的比较
- Integer与int的比较
- Int和Integer的比较
- Integer与int的比较
- Integer和int的比较
- Integer与int的比较
- Integer与int的比较
- Integer,int 数字进行比较
- Integer与int的比较
- Integer和int大小比较
- Integer与int的比较
- Spring Web MVC基础的一个小实例
- 详解google Chrome浏览器(理论篇)
- Android框架/系统服务是怎样管理第三方Search数据源的?
- 《趣学Python编程》笔记---第一部分:学习编程(2)
- Activiry的启动模式
- int、integer比较。。。。
- 关于面试跳槽之类的
- 牛客模拟一:连续整数
- 什么时候使用CountDownLatch
- HTTP 超文本传输协议
- Spring3中好用的工具类收集
- TextView控件之 跑马灯效果
- C#窗体应用程序之鼠标事件
- XAF-Domain Components 技术 使用接口来定义ORM业务对象