在Java中,如果我声明:
MyClass obj;
在这里,obj是被称作"引用(reference)"还是"对象(object)"?我没有实例化类。
在Java中,如果我声明:
MyClass obj;
在这里,obj是被称作"引用(reference)"还是"对象(object)"?我没有实例化类。
obj是MyClass的实例的引用。
当前,该引用为NULL,因为您尚未将其分配为引用任何实例。
从技术上讲,MyClass必须是Object的子类,因此也可以说obj是Object的实例的引用。
参考: 指向内存中某个对象的变量。 它被存储在堆栈中,也可以包含在其他对象中(这时它们不是真正的变量,而是字段),这将把它们放置在堆中。
对象: 动态创建的类实例。 它存储在堆中。
示例:
MyClassI aObj,aObj1;
aObj=new MyClass2();
在第一行,aObj和aObj1是引用。
在第二行,aObj引用了MyClass2的对象(new运算符创建了MyClass2的对象,并将其地址分配给aObj)。
为了更好地理解,考虑一个拥有driverName成员的Car类。
Car c1,c2;
c1.driverName="Andrew"
c2.driverName="Gabriel"
System.out.println(c1.driverName);//gives Andrew
System.out.println(c2.driverName);//gives Gabriel
c1=c2;
c2=null;
// gives gabriel because the address of c2 is copied to reference c1.
// the object is not nullified because c2 is just a reference when
// assigning null the address that is stored on c2 in nullified not
// the object it points..
system.out.println(c1.driverName);
aObj=null
在这种情况下,aObj
是一个 null
引用,而在这种情况下 aObj=new MyClass2();
,它是指向类型为 MyClass2
的对象的引用。 - Faiznew MyClass()
可以被看作是一个对象。引用:是一个具有名称并可用于访问对象内容的变量,可以将引用分配给另一个引用传递给方法或从方法返回。所有引用的大小都相同,无论它们的类型是什么,如 "Object object;"。
对象:是存在于Java运行时环境分配的内存中的实体,对象位于堆上且没有名称,例如 "Object object = new Object();"。
因此 MyClass obj 这里是指向 Null 的引用。
我们可以用以下两个规则总结这个原则:
obj是MyClass类型的引用。目前该引用没有指向任何对象(即:null)。
MyClass
实例的引用,该引用为空。obj
是一个变量。它可以保存一个引用或者null值。如果它保存的是一个引用,那么引用指向的是一个对象。'