是关键字" new"在Java中必不可少

时间:2018-04-09 22:34:09

标签: java oop

以下两个代码给出了相同的结果,即使其中只有一个使用关键字new

代码1:

Integer test = new Integer(3);

代码2:

Integer test = 3;

从OOP的角度来看,两个代码之间有什么不同吗?

2 个答案:

答案 0 :(得分:4)

使用 new keyword 实例化变量将堆内存中的变量分配为新对象,但如果使用直接初始化,则变量将存储到 JVM中汇总内存如果您声明一个具有相同值的新变量,它将引用第一个变量的值,使用直接初始化有两个好处:

  1. 更好的表现
  2. 程序要求所需的内存较少
  3. 注意:您应该注意使用直接初始化,因为JVM池内存的大小有限。

答案 1 :(得分:2)

这里实际发生的是编译器为行test = 3;生成相同的字节代码,就像您编写test = Integer.valueOf(3);一样。在Java中,这称为自动装箱。它允许将原始类型转换为Object(引用类型),反之亦然,而无需在代码中明确声明。您可以在此处详细了解:Autoboxing and Unboxing at the Oracle Java Tutorials

在Java中,在某些时候,几乎所有对象实例都是使用new关键字创建的,并且必须使用new来调用构造函数,该构造函数将为内存分配并初始化一个物体的领域;它是由程序员明确地完成还是在幕后完成另一件事。例如,Integer.valueOf(3) 可以创建一个新的Integer实例,在调用时表示原始int 3,但它也可以返回对先前创建的表示3的Integer实例的旧引用,因为实例Integer类是不可变的。无论哪种方式,您都将获得对表示原始int值3的Integer对象的引用。