Integer j;
    int i;
    public void test()
    {
        System.out.println(j);
        System.out.println(i);
    }输出结果:
null
0
问题1:为什么integer输出的null,而不是0.
    public void test()
    {
        Integer j;
        int i;
        System.out.println(j);
        System.out.println(i);
    }问题2:为什么这样编译都不通过?而问题1中没有赋值也能通过?学java也有段时间了,这些问题的结果都知道,但是不知道其中的理论,不知道所以然,还请大家不吝赐教,在此多谢了。

解决方案 »

  1.   

    int 是JAVA 基本对象
    Integer 是int 的封装对象Integer 需要进行初始化 赋值
    才有对象和值int 有默认对象 0
      

  2.   

    1. Integer是对象,int是原始类型
    2. 类成员变量有ClassLoader提供的初始化,可以保证初值,
        方法空间里的临时变量可没有这个待遇
      

  3.   

    int不是对象,  不是基于 Object的 基本数据类型Integer 是对int数据类型的包装,是一个对象,是基于Object的
      

  4.   

    Integer 是对象,java默认对象的初始值当然是null
    int不是对象,是基础数据类型,java默认初始值就是0
      

  5.   

    第一种情况是因为先调用了构造函数初始化了这两个属性,再调用的test方法,所以不会报错
    第二种情况就直接没初始化
      

  6.   

    成员变量由系统自动初始化,所有简单变量除boolean类型外都为0,boolean类型为false,其他类型的对象均赋值为null。所以不会报错。
    而对于局部变量,系统不会自动为它赋值。必须手动赋初始值。否则报错。
    int为基本数据类型,而integer为包装类对象。
      

  7.   

    首先,java中变量分为基本数据类型和引用类型,Integer是引用类型,而int是基本数据类型。问题1中i和j是类的成员变量,jvm在为对象实例化时,会先根据对象的大小分配一定的内存空间,把这部分内存清零,从而对象的所有成员变量都会有默认值,这样Integer的默认值是null,int的默认值是0.问题2中i和j是局部变量,jvm不会进行默认赋值,必须对局部变量进行初始化,否则,编译无法通过。
      

  8.   

    Integer是引用类型,int是基本数据内型
    你放到方法外面能打印出null 和0是因为构造方法给你初始化了
    放到方法内,就打印,构造方法初始化不了方法内部的局部变量,所以没有初始化的数据被调用所以出错了!
      

  9.   

    在类中定义的成员变量,如果没有初始化,会自动赋值默认值 对象(Integer):null int:0
    在方法中的定义的变量,不会自动赋值,所以必须手动初始化。《Thinking in Java》里面说过!
      

  10.   

    int是基本类型,也是实例变量,默认为0
    Integer是引用类型变量,存放对象的地址,默认就是null
    局部变量是没有默认值的。
      

  11.   

    Integer是整型类,不仅仅是可以标示int型,还包括bye、short和long等。对象需要实例化并赋值的,而int即是int32,默认值是0.
    问题2应是10的回答。
      

  12.   

    楼主搞java有一段时间了啊?这样的问题都没搞懂,说明你还没入门。
    前者,作为属性,实例化时会初始化属性值,没有则赋默认值,对象为null,基本类型0,所以编译通过,执行时结果一个为null,一个为0
    后者,作为局部变量是必须显式赋值的,所以编译不通过
      

  13.   

    integer是类  没有new之前 他的引用都是null  而int是基本类型 java系统会默认初始化0
      

  14.   

    java中的int类型和integer之间的是有一定联系和区别的,你如果明白了他们之间的这种关系就一切明白了:
    Integer是引用类型,而int是基本数据类型。问题1中i和j是类的成员变量,jvm在为对象实例化时,会先根据对象的大小分配一定的内存空间,把这部分内存清零,从而对象的所有成员变量都会有默认值,这样Integer的默认值是null,int的默认值是0.但是在问题2中i和j都是局部变量,对于局部变量来说必须手动的去给他赋初始值;若果不进行初始值的赋值的话系统会编译不通过的;
    还有就是int和integer之间的相互转化关系:
    eg Integer i1=98 int i2=98
       System.out.println(i1=i2)//true;Integer i1=298 int i2=298
       System.out.println(i1=i2)//false;
    这是因为整型在小于128到大于等于-128时Integer的存储结构与int的存储结构是一样的;在这个范围它二者之间的存储结构是不一样的;
      

  15.   

    我回答你的第二个问题,为什么编译不过去:
    因为System.out.println()方法的参数是字符串,如果是对象会自动调用它的toString()方法,而这时因为你的对象是null的所以编译过去。
      

  16.   

    。。无力吐槽了
    谁/那本书告诉你 System.out.println() 的参数一定得是字符串的,我建议你去抽他
      

  17.   


    Integer i1=298 int i2=298
      System.out.println(i1=i2)//false;
    你自己写段代码试试,这个是TRUEIngeger i1=298 ;Integer i2 =298
    才是 i1 != i2
      

  18.   

    1、i和j是成员变量,系统自动赋值,基本数据类型int自动赋值为0,包装类Integer自动赋值为null。
    2、i和j在方法里面,是局部变量,局部变量在声明的时候必须初始化(赋值)。
      

  19.   

    因为integer是对象,而int是基本类型
      

  20.   


       基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。
    Java中的简单类型从概念上分为四种:实数、整数、字符、布尔值。但是有一点需要说明的是,Java里面只有八种原始类型,其列表如下:
      实数:double、float
      整数:byte、short、int、long
      字符:char
      布尔值:boolean
    复杂类型和基本类型的内存模型本质上是不一样的,简单数据类型的存储原理是这样的:所有的简单数据类型不存在“引用”的概念,简单数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面只有这八种数据类型是这种存储模型;而其他的只要是继承于Object类的复杂数据类型都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。
    Java的简单数据讲解列表如下:
    int:int为整数类型,在存储的时候,用4个字节存储,范围为-2,147,483,648到2,147,483,647,在变量初始化的时候,int类型的默认值为0。
    short:short也属于整数类型,在存储的时候,用2个字节存储,范围为-32,768到32,767,在变量初始化的时候,short类型的默认值为0,一般情况下,因为Java本身转型的原因,可以直接写为0。
    long:long也属于整数类型,在存储的时候,用8个字节存储,范围为-9,223,372,036,854,775,808到9,223,372,036, 854,775,807,在变量初始化的时候,long类型的默认值为0L或0l,也可直接写为0。
    byte:byte同样属于整数类型,在存储的时候,用1个字节来存储,范围为-128到127,在变量初始化的时候,byte类型的默认值也为0。
    float:float属于实数类型,在存储的时候,用4个字节来存储,范围为32位IEEEE 754单精度范围,在变量初始化的时候,float的默认值为0.0f或0.0F,在初始化的时候可以写0.0。
    double:double同样属于实数类型,在存储的时候,用8个字节来存储,范围为64位IEEE 754双精度范围,在变量初始化的时候,double的默认值为0.0。
    char:char属于字符类型,在存储的时候用2个字节来存储,因为Java本身的字符集不是用ASCII码来进行存储,是使用的16位Unicode字符集,它的字符范围即是Unicode的字符范围,在变量初始化的时候,char类型的默认值为'u0000'。
    boolean:boolean属于布尔类型,在存储的时候不使用字节,仅仅使用1位来存储,范围仅仅为0和1,其字面量为true和false,而boolean变量在初始化的时候变量的默认值为false。
    Integer是int的封装类,里面有很多进行处理的静态方法  
    Integer是对象而int不是,内存的分配位置也不一样
    int是一种基本数据类型,而Integer是相应于int的类类型,称为对象包装。  
    实现这种对象包装的目的主要是因为类能够提供必要的方法,用于实现基本数据类型的数值与可打印字符串之间的转换,以及一些其他的实用程序方法;  
    另外,有些数据结构库类只能操作对象,而不支持基本数据类型的变量,包装类提供一种便利的方式,能够把基本数据类型转换成等价的对象,从而可以利用数据结构库类进行处理。   
    int 是基本类型,(int)(Math.Random()*100)就是一个数,可以进行加见乘除。 Integer是class ,那么 new Integer(temp)就是一个对象了,可以用到Integer这个class的方法,例如用intvalue()可以返回这个int的值。int a=1;这是基本数据类型是能参与运算的.而Integer b= new Integer(1);c=b.floatvalue;Float a= new Float(null);是可以的用Float初始化一个对象这个a有很多方法而float a;就没有因为原始没有引用类,java 提供两种不同的类型:引用类型(或者封装类型,Warpper)和原始类型(或内置类型,Primitive)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
    原始类型 封装类
    boolean Boolean
    char Character
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
    1 、Boolean VS boolean
    public final class Boolean extends Object  implementsSerializable,Comparable<Boolean> 
    Boolean 类将基本类型为boolean的值包装在一个对象中。一个Boolean类型的对象只包含一个类型为boolean的字段。此外,此类还为boolean和String的相互转换提供了许多方法,并提供了处理 boolean时非常有用的其他一些常量和方法。
    2、 Byte VS byte
    public final class Byte extends Number implements Comparable<Byte> 
    Byte类将基本类型 byte的值包装在一个对象中。一个Byte类型的对象只包含一个类型为 byte的字段。此外,该类还为 byte和 String的相互转换提供了几种方法,并提供了处理 byte时非常有用的其他一些常量和方法。
    3、 Character VS char
    public final class Character extends Object  implements Serializable, Comparable<Character> 
    Character类在对象中包装一个基本类型char的值。
           Character类型的对象包含类型为char的单个字段。此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然。
    4 、Double VS double
    public final class Double extends Number implements Comparable<Double> 
     Double类在对象中包装了一个基本类型double的值。每个Double类型的对象都包含一个double类型的字段。此外,该类还提供了多个方法,可以将double转换为String,将String转换为double,还提供了其他一些处理double时有用的常量和方法。
    5、 Float VS float
    public final class Float extends Number implements Comparable<Float>      Float类在对象中包装了一个float基本类型的值。Float类型的对象包含一个float类型的字段。此外,此类提供了几种方法,可在float类型和String类型之间互相转换,并且还提供了处理float类型时非常有用的其他一些常量和方法。
    6、 Integer VS int
    public final class Integer extends Number implements Comparable<Integer> 
    Integer类在对象中包装了一个基本类型int的值。Integer类型的对象包含一个int类型的字段。
    此外,该类提供了多个方法,能在int类型和String类型之间互相转换,还提供了处理int类型时非常有用的其他一些常量和方法。
    7 Long VS long
    public final class Long extends Number implements Comparable<Long> 
    Long类在对象中封装了基本类型long的值。每个Long类型的对象都包含一个long类型的字段。
    此外,该类提供了多个方法,可以将long转换为String,将String转换为long,除此之外,还提供了其他一些处理long时有用的常量和方法。
    8、 Short VS short
    public final class Short extends Number implements Comparable<Short> 
    Short类在对象中包装基本类型short的值。一个Short类型的对象只包含一个short类型的字段。另外,该类提供了多个方法,可以将short转换为String,将String转换为short,同时还提供了其他一些处理short时有用的常量和方法。
    9、public final class Voidextends Object
    Void 类是一个不可实例化的占位符类,它保持一个对代表 Java 关键字 void 的 Class 对象的引用。
      类的对象才能为null,不能把null赋值给一个变量不能,如int m=null;但可以String s=null;因为String是个类。
      

  21.   

    int是java的基本数据类型,当你声明一个int类型的变量时,如果不给它赋初始值那么它默认的值就是0(如果是double类型的话就是0.0)。
    Integer是java封装好的类,Integer j声明了一个Integer的对象j,可以理解为j的数据类型为Integer,它的默认值是null
      

  22.   

    只有基本数据类型在声明的时候能享受的到系统默认值的待遇,他们的包装类是对象,对象声明的时候只是个引用,如果你不new一下你的对象的话,啥也没有,类似于空指针。
      

  23.   


    是的!补充一下局部变量没有赋初始值也会通过的原因是,在其他方法体内可能会给该变量赋值,那存在有意义,加载的时候jvm会给个初始值!方法体内定义的变量如果没有赋初始值,那存在有什么意义,干脆就认为是非法的
      

  24.   

    第一段代码里是成员变量,也就是类变量,会自动初始化,再加上Integer是int的包装类,Integer是一个类,它的默认值是null,然后int的默认值是0啊;第二段代码你把那个变量放在了方法里面,它已经是局部变量了,不会自动初始化,所以编译过不去
      

  25.   

    1.int 是基本数据类型Integer 是java中封装的对象所以才会有null另外 对于全局变量 int 的默认值为0  2.对于第二问 主要是由于 int 的那个变量引起的  java中对于 局部变量int 是必须给一个 初始值(即在使用前 先赋值)  所以第二段代码 不能通过编译
      

  26.   

    问题1:为什么integer输出的null,而不是0.
    首先,Integer是int的一个包装类,类的初值自然是null。
    其次,int是一中基本类型,整型的初值自然是0。问题2:为什么这样编译都不通过?而问题1中没有赋值也能通过?
    这是JAVA的语法特性,局部变量必须赋予初值,否则无法通过编译。
    而第一种方式是因为成员变量,成员是允许不赋初值的。
      

  27.   

    Integer是int的封装类,默认初始值为null
    int是基础类,默认初始值为0
      

  28.   

    int是基本类型数据,默认值为0
    Integer是int的封装对象,默认值为null
      

  29.   

    int是数值类型,返回的默认值0
    Integer则是int对应的封装类,所以返回null
    java中几种基本类型数据,都有对应封装类
      

  30.   

    int 是JAVA 基本对象
    Integer 是int 的封装对象
      

  31.   

    Integer是一个类,在使用时如果没有此对象当然就是null啦,int是java中的基本类型,java规定int的默认值是0,integer是对int的一个封装。希望你能理解
      

  32.   

       .....可以在论坛里面找下关于Integer和int的帖子!   
      

  33.   

    int是原始类型,Integer是引用类型,是int的封装
    它的默认初始值是null、而int的默认值是0