在Java中使用新创建的对象和引用之间有什么区别?

时间:2019-05-01 05:47:10

标签: java object new-operator

我有两个classes,我想知道创建一个新创建的object(使用new关键字)和进行引用(has-a)之间的实际区别。哪种方法更适合节省内存或提高性能,请参考示例代码

Student s1 = new Student();
or
Student s1;

2 个答案:

答案 0 :(得分:1)

虽然您可以像这样在自己的行上定义变量

Student s2;

由于它未经构造或初始化,因此不能像s2.setName("x")那样使用。

您必须构造它,也可以按照自己的方式完成它,而不是像显示的那样进行组合,前提是您像上面那样声明

s2 = new Student();

我想说的是编译器会优化掉未使用的引用,但是对于这样一个简单的变量,如果它占用了任何内存,这是一个可忽略的差异

Does unused import and objects have an performance impact

而且您只有一个类定义。 public class Student。拥有该类类型的变量称为其实例

答案 1 :(得分:1)

如果不创建对象本身,就不能创建对对象的引用。您可以将引用视为指向堆中对象的一些指针。

当你说:

Student s = new Student();

new Student()是构造函数调用,它将在堆上创建一个新对象。并且您正在将此对象分配给引用(在这种情况下为s)。

将引用(传递给方法)确实非常好,因为它使您可以重复使用同一对象(每次传递时都无需重新构造同一对象)

public void someMethod() {
    Student s = new Student();
    updateStudent(s); // here you are passing the reference 
}

public void updateStudent(Student student) {
    ....
}

传递引用可以避免创建新对象,但是您还应该知道,s方法中的studentupdateStudent()都引用了内存中的同一对象, updateStudent()中对对象的更改将反映在someMethod()中。

如果您正在玩需要花费大量构造时间的任何物体,则通过引用可以节省大量时间和内存。 (例如,具有100000个元素的java.util.List)。将引用传递给列表可以为堆节省100000个元素的预订空间,然后复制它们,然后将其传递给方法。