我有点不明白啊 Integer test1 = new Integer(123);   和  Integer test2 = new  Integer("123");   到底有什么不一样啊?另外  int test3 = test1 ;    一个Integer 的 怎么就能直接 转换为 int 的了呢?   不需要强制类型转换么?

解决方案 »

  1.   

    Integer test1 = new Integer(123);  和  Integer test2 = new  Integer("123");  肯定是不一样啊.你new了两个对象啊,那内存空间里就为你开辟了两个不同的内存区域啊,只不过是两个对象里的值相等而已
    Integer是包装类.也就是说它现在已经是是一个类了.别把他和int混淆另外  int test3 = test1 ;    一个Integer 的 怎么就能直接 转换为 int 的了呢?  不需要强制类型转换么?
    这个是java有个自动机制,会自动把int包装成integer.也会将integer自动装换成int 这个机制叫什么我忘了.好像叫什么自动封箱还是什么来的!有人知道不?
      

  2.   

    1.new个两个对象 test1与test2只是字面值上相等 其它就没什么联系了
    2.不会报错的  java的自动装包/拆包(jdk1.5新特性) 和.net的装箱拆箱差不多的
      

  3.   


    合着说 test1.equals(test2) 是为 true 的, Integer test2 = new  Integer("123");   在传入参数的时候是 String 但是还是被自动转化成了 Integer类型  和 前面的  Integer test2 = new  Integer(123);  下场是一样的!!   
      

  4.   

    这个问题其实看看API文档就很清楚了
    test1和test2,你是分别用来Integer类的2个不同的构造方法创建,这2个实例对象用equals()方法可以看到相等,因为Integer类重写来equals().
    从1.5版本开始包装器类型和基本类型之间可以自动转换,即自动包箱和自动拆箱
      

  5.   

    Integer test1 = new Integer(123);  和  Integer test2 = new  Integer("123");只是构造方法的重载而已,他们都是创建一个Integer对象. 在这里,你如果要判断两个Integer对象是否相等只能用equals方法了,因为是对象类型,而且你new了两次,内存就分配了两个空间分别存放两次创建的对象, 用==是比这两个对象的地址,当然是不相等的
    int test3 = test1 这个代码,在JDK1.5以下是肯定会报错的.Integer是int的一个封装类而已,而且可以告诉你,每一个基本类型都有相对应的封装类. 1.5以后会自动解包和自动打包,是不需要强制转换的.!
      

  6.   

    Integer是java中的内置对象,是对int类型的封装,他就是int类型以对象形式存在于内存中。
        同时提供一些相关int类型的操作。
        比如  把一个数字字符串转换为int类型,则是常见的操作
        int value = Integer.parseInt("123");   java中每一个基本类型都有对应的内置对象类型。
        double -->  Double
       boolean --> Boolean  等等
      基本类型的内置对象有一些使用上的好处:比如Integer类型能表示null,而int在使用的时候就必须有实际的值。
      

  7.   

    (1)除了是两个对象之外,没啥不一样,Integer类有两个构造函数,一个接受整数参数,另一个接受字符串参数;接受字符串参数的版本实际上是把字符串解析成整数。
    (2)这个事情叫“自动拆箱”,是java 1.5之后引入的新特性。
      

  8.   

    是不同的构造方法,一个是字符串,一个是整型参数,JDK5.0后有自动装箱和自动解箱,内部给你自动转换了,原来是要调用某个方法才能转换的
      

  9.   

    正解。那个自动打包/解包功能是jdk1.5的新特性。
      

  10.   

    Integer 就是个包装类 int到Integer会自动包装
    Integer到int也会自动解包 呵呵