关于包装类 提出一个问题

下面这个程序是模拟对Integer的一个包装。

     public class IntWrapper

    {

    private int value;

    public IntWrapper(int value)

    {

    this.value = value;

    }

    // 包含int类型相关的算法

    把十进制转换成2进制,8进制和16进制

    }

    ...main...

    {

    IntWarapper wrapper = null;

     wrapper = new intwrapper(17);

    }

学了一段时间的Java,现在忽然有些困惑。
第一次 IntWarapper wrapper = null;
第二次 wrapper = new intwrapper(17);

    问题一: 第二次是将第一次的值给覆盖了吗。
    问题二: 在我们编写java程序的时候,哪些值是需要初始化或者说程序强制初始化,哪些值是不需要初始化的。

问题一:不是将第一次的值给覆盖了,IntWarapper wrapper = null;null在底层也是一种指针,这个你先不用管,就把它当成,给wrapper初始化为空,不指向任何对象,wrapper = new intwrapper这一句,jvm在运行的时候发现new关键字,在堆中开辟内存空间,并调用构造方法进行初始化,返回这个对象的引用,并赋值给wrapper变量,引用类似C语言的指针但稍有区别,刚开始学习可以把它当成指针
问题二:java中成员变量如果你不对它进行初始化,jvm也会把它赋值为0或者null或者false,类型不同,就不同,局部变量,需要自己初始化,另外,其实一般情况下都是构造器中进行初始化的,因为你要使用它,肯定要给它赋值,如果不初始化的话,基本类型可能只会造成逻辑错误,引用类型会直接崩溃并抛出控指针异常
另外如果需要使用包装类,可以使用java自带的包装类库

一般的基本数据类型不需要指定初始值,虚拟机会自己指定,而变量需要初始值 例如i

基本数据类型必须是类属性不用初始化

第一个问题是这样的 java对于引用数据类型(包装类) 和基本数据类型 这种类型 是两种不同的储存空间
基本数据类型存放在栈中 引用数据类型存放在堆中
第一次 IntWarapper wrapper = null; 这时在栈中开辟一块新的内存空间 用来放wrapper wrapper的类型是IntWarapper 而堆不做动作 你也可以理解
为 他只是一个中间过渡的东西 就是一个变量
第二次 wrapper = new intwrapper(17); 这时候在堆中开辟一块新的内存空间 用来放new的 IntWarapper 类型的对象 而用栈中的warapper来指向(也可以叫作为)
这个新new 的对象
具体的你可以百度一下java的栈和堆的内存
第二个问题
从代码角度出发 你也可以这么理解
当一个实体类只有有参构造 没有无参构造的时候 name如果你要创建一个该实体类的对象 name你就必须先初始化值
因为有的程序在设计的时候 你创建一个类的对象 肯定要用他来干什么事 为了防止你使用中发生有的属性没有值得情况 可以这么做