A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张健 中级黑马   /  2012-3-20 13:24  /  2679 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer i1= 12;

Integer i2= Integer.valueOf(12);
i1与i2都是Integer的对象,但是方式却不一样,这两种方式之间有什么区别吗? 如果有区别请举例说明!

5 个回复

倒序浏览

public static Integer valueOf(int i
)返回一个表示指定的 int 值的 Integer 实例。如果不需要新的 Integer 实例,则通常应优先使用该方法,
而不是构造方法 Integer(int),因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。
回复 使用道具 举报
你看看这个估计对你有帮助.

int   和   Integer   有什么区别

(一)

int是面向机器底层的数值类型,是Primitive类型的数据类型,而Integer是int的Warpper类,是面向对象的即OOP的对象类型。int   一般只用在数值计算中,而Integer是用在Java的其它要使用对象的地方,比如Map的Key与Value,List与Set的Element若要保存数值信息都要把int包装成Integer对象使用。

(二)
Java   提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型           封装类
boolean             Boolean
char                   Character
byte                   Byte
short                 Short
int                     Integer
long                   Long
float                 Float
double               Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为   null,而原始类型实例变量的缺省值与它们的类型有关。
回复 使用道具 举报
class  AutoBox
{
   public static viod main(String[] args)
    {
      Integer iobj=3;//自动把基本类型3装成了Integer类型,在赋给iobj(自动装箱)
            System.out.println(iobj+12);
            //iobj是Integer类型,Integer不支持加法,它必须转换成基本类型整数才可以(自动拆箱)

              Integer i1=12;
              Integer i2=12;
            System.out.println(i1==i2); //true
              Integer i1=137;
              Integer i2=137;
            System.out.println(i1==i2); //false           
   }
}

P.S:在一个字节-128--127之内的数字,一旦包装成Integer对象是将它们缓存起来,节省空间。因为数字小,出现的几率大,没必要每一个数字对应一个对象,这是一种设计模式,称为享元模式
回复 使用道具 举报
Integer i1 = 12; (不是 int i = 12; )
执行上面那句代码的时候,系统为我们执行了:Integer i1 = new Integer(12); 此即基本数据类型的自动装箱功能。
Integer i2= Integer.valueOf(12);
Integer类里有个内隐类IntegerCache,存放-128~127范围内的对应Integer类对象。
该类的静态方法valueOf的实现是当数在此范围之内时直接返回内隐类IntegerCache中存放的对应的Integer类对象,否则用new新生成一个对象。
回复 使用道具 举报
Integer i1= 12; 与 Integer i2= Integer.valueOf(12);
1,相同点:结果都是产生一个值为12的Integer对象;
2,区别:代码的运行过程不一样:前者通过编译器判断,并把右边的12变成参数传递给Integer的构造方法 new Integer(int  i);后者,通过静态方法valueOf(int i)在方法内部创建Integer对象并返回对象;
3,用法:前者只是用于建立对象,右边只能写常量,不能写变量;而后者可以接收变量等待建立对象,适用范围更加广泛;

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马