这个问题在这里已有答案:
我有两个classes
,我想知道创建一个新创建的object
(使用new关键字)和制作一个引用(Has-a)之间的实际区别。哪种方法更适合节省内存或性能目的,请参考示例代码
Student s1 = new Student();
or
Student s1;
虽然您可以像这样在自己的行上定义变量
Student s2;
它不能像s2.setName("x")
一样使用,因为它不是构造或初始化的。
你必须构建它,它可以在它自己的行上完成而不是如图所示组合,假设你像上面那样声明它
s2 = new Student();
我想说编译器会优化掉未使用的引用,但对于这样一个简单的变量,如果它确实占用了任何内存,那就是一个可以忽略的差异
Does unused import and objects have an performance impact
而且你只有一个类定义。 public class Student
。具有该类类型的变量称为它的实例
如果不创建对象本身,则无法创建对象的引用。您可以将引用视为指向堆中对象的指针。
当你说:
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
方法中的student
和updateStudent()
都是对内存中相同对象的引用,并且updateStudent()
方法中对象的更改将反映在someMethod()
中。
如果您正在玩任何需要大量施工时间的物体,传递参考可以节省大量时间和内存。 (示例包含100000个元素的java.util.List
)。传递对列表的引用可以使您从堆上预留100000个元素的空间,然后复制它们,然后将它们传递给方法。