黑马程序员技术交流社区
标题:
有关Integer的问题
[打印本页]
作者:
樊占江
时间:
2012-8-23 01:06
标题:
有关Integer的问题
public class AutoBox {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer iObj=3;
System.out.println(iObj+12);
String s1=new String("abc");
String s2=new String("abc");
Integer i1=137;
Integer i2=137;
System.out.println(i1==12);
Integer i3=Integer.valueOf(3);
Integer i4=Integer.valueOf(3);
System.out.println(i3==i4);
}
}
我现在想要的是如何让Integer i1=137;
Integer i2=137;
System.out.println(i1==12);不为false
作者:
王海亮
时间:
2012-8-23 01:07
public static void main(String args[]){
Integer a = new Integer(666);
//a++;
a = a+1;
System.out.println(a);
change(a);
System.out.println(a);
}
public static void change(Integer a){
a = 10;
}
作者:
李知伦
时间:
2012-8-23 02:36
先看一下Integer的原码
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
从jdk1.5开始,有“自动装箱”这么一个机制,在byte-128到127范围内(ps整型的八位二进制的表示的范围为-128到127),如果存在了一个值,再创建相同值的时候就不会重新创建,而是引用原来那个,用==来比较时,是同一个对象
但是超过byte范围还是会新建的对象new Integer(),那么用==来比较时,地址是不等的
Integer i1=new Integer(128);
int i2=128;
//经历拆箱过程将i1对象变为int i1=128;所以为true
System.out.println("---new Integer与int---"+(i1==i2));
Integer i3=new Integer(128);
//两个都是new。。两个对象间的比较,比较的是地址,所以为false
System.out.println("---new Integer与new Integer---"+(i1==(i3)));
Integer i4=128;
Integer i44=127;
//不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
System.out.println("---new Integer与Integer---"+(i3==i4));
Integer i5=128;
Integer i55=127;
//Integer与Integer间的比较,自动装箱过程,超过范围则创建新对象
System.out.println("---Integer为128与Integer为128---"+(i4==i5));
System.out.println("---Integer为127与Integer为127---"+(i44==i55));
作者:
王海亮
时间:
2012-8-23 11:06
本帖最后由 王海亮 于 2012-8-23 12:21 编辑
王海亮 发表于 2012-8-23 01:07
public static void main(String args[]){
Integer a = new Integer(666);
//a++;
都在八维住用 同一个条线
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2