Den*_*ret 17

没有.

这是完全相同的事情.在第一种情况下,您只有一个补充变量.

请注意,使用自动装箱您很少需要同时拥有变量intInteger变量.所以对于大多数情况来说这就足够了:

int pInt = 500;
Run Code Online (Sandbox Code Playgroud)

整数有用的主要情况是区分变量未知的情况(即null):

Integer i = null; // possible
int i = null; // not possible because only Object variables can be null
Run Code Online (Sandbox Code Playgroud)

但是不要保留两个变量,一个就足够了.

  • 我们说同样的事情:如果你想要一个非定义的整数,你必须使用一个Integer变量,因为你不能将int变量设置为null. (3认同)

Muk*_*oel 6

对于初学者

int pInt = 500;,这里pInt不是一个对象而是在

Integer wInt = new Integer(500); wInt 是一个参考

这也是java不是纯面向对象语言的原因.因为一切都不是java的对象.


Abh*_*Oza 6

在Java中,primitve类的实例保存实例的实际值,但包装类的实例保存对该对象的引用.即找到对象的地方的地址.

当您使用此行编写程序时:

Integer integer = 500;
Run Code Online (Sandbox Code Playgroud)

编译器将其更改为:

Integer integer = new Integer(500);
Run Code Online (Sandbox Code Playgroud)

此过程称为自动装箱.这是自动将原始实例放在Integer的"框"中.因此,输出以下程序:

public class PrimitiveToObject {
    public static void main(String[] args) {
        printClassName(1);
        printClassName(1L);
        printClassName((char)1);
    }
    public static void printClassName(Object object){
        System.out.println(object.getClass());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是:

class java.lang.Integer
class java.lang.Long
class java.lang.Character
Run Code Online (Sandbox Code Playgroud)

这个:

int i = integer;
Run Code Online (Sandbox Code Playgroud)

变成这个:

int i = integer.intValue();
Run Code Online (Sandbox Code Playgroud)

这称为拆箱.

如上所示,点运算符(.)用于名为integer但未打开的变量i.也就是说:包装器的对象可以被解除引用,但不能是原始实例.

拳击和拆箱可能会减慢程序的速度.因此,对于一个新手来说,包装可能看起来像增加了负担,但事实并非如此.包装器用于对象需要作为引用类型的位置.例如:Map<Integer,String>map=new HashMap<Integer,String>();是有效的声明,但Map<int,String>map=new HashMap<int,String>();不是有效的声明.

包装器非常有用的另一种典型情况:
在MySQL中,NULLINT类型列的有效条目.但是在Java中,int不能null有价值,Integer可以.这是因为在SQL中NULL符号表示不可用.因此,如果您使用JDBC在MySQL表中插入整数值,则nulljava程序中的a将有助于插入NULLMySQL表.

包装类在与此类似或相似的情况下也可能有用:

Boolean decision; // Using wrapper for boolean.
if("YES".equalsIgnoreCase(consent))
    decision = Boolean.TRUE; // In favour
else if("NO".equalsIgnoreCase(consent))
    decision = Boolean.FALSE; // Not in favour
else if("CAN'T SAY".equalsIgnoreCase(consent))
    decision = null; // Undecided
Run Code Online (Sandbox Code Playgroud)