Integer包装类问题 Integer i1=3; Integer i2=3; System.out.println(i1==i2); Integer i3=300; Integer i4=300; System.out.println(i3==i4); 输出结果是true false请高手们帮我解答一下,我很困惑。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java 为了速度对-128到127之间的数的自动拆装箱做了特殊处理。 你定义成int就行了塞 你又不创建对象 用interger干嘛 而且你这么比较应该用equals()方法塞 jvm对代码的一些优化 ...... 说不定哪个版本又变化了 Integer是类,不是基本数据类型,比较的时候是对象的比较,但是java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);在jdk源码中Java代码public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i <= 127) { return IntegerCache.cache[i + offset]; } return new Integer(i); } private static class IntegerCache { private IntegerCache(){} static final Integer cache[] = new Integer[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache = new Integer(i - 128); } } 就是Integer 建立了一个Integer 缓存对象数组cache[],对应-127-128 之间的每个值。由于Integer 是不可变类,因此这些缓存的Integer 对象可以安全的重复使用。Integer i = XXX ,就是Integer i = Interger.valueOf(XXX), 首先判断XXX 是否在-127-127 之间,如果是直接return 已经存在的对象,否则就只能new 一个了,即在堆中另开辟一块内存,所以就返回false。 我想了解一下java各个基本类,常用类的继承关系,有推荐吗? 缓冲区是干什么的。JVM是怎么管理缓冲区的。 高手帮忙一下这个小程序的设计,万分感谢! 请问这段代码为何编译通不过? JAVA 调用函数值为何不娈?? [在线等待]初学:一个简单的JDBC问题 !!!请问怎样得出一个文件的内容? 寥寥数行,却始终无法编译通过,打击我啊! 一个EJB的简单问题,J2EE版人太少了,来这里问。请大家帮帮我 送分了!如何取得当前resultSet返回的字段数? static代码块和方法 applet大图片显示问题
...... 说不定哪个版本又变化了
Java代码public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) {
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache = new Integer(i - 128);
}
} 就是Integer 建立了一个Integer 缓存对象数组cache[],对应-127-128 之间的每个值。由于Integer 是不可变类,因此这些缓存的Integer 对象可以安全的重复使用。
Integer i = XXX ,就是Integer i = Interger.valueOf(XXX), 首先判断XXX 是否在-127-127 之间,如果是直接return 已经存在的对象,否则就只能new 一个了,即在堆中另开辟一块内存,所以就返回false。