在Java中使用新创建的对象和引用有什么区别? [重复]

问题描述 投票:-10回答:2

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

Student s1 = new Student();
or
Student s1;
java object new-operator
2个回答
1
投票

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

Student s2;

它不能像s2.setName("x")一样使用,因为它不是构造或初始化的。

你必须构建它,它可以在它自己的行上完成而不是如图所示组合,假设你像上面那样声明它

s2 = new Student();

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

Does unused import and objects have an performance impact

而且你只有一个类定义。 public class Student。具有该类类型的变量称为它的实例


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个元素的空间,然后复制它们,然后将它们传递给方法。

© www.soinside.com 2019 - 2024. All rights reserved.