Java中的Object,Reference ID和Reference Variable有什么区别?

时间:2012-05-26 13:30:15

标签: java

java中的以下内容有什么区别:

  1. 对象

  2. 参考ID

  3. 参考变量

  4. 当我看到这样的陈述时:

    Emp e = new Emp();
    

    此处Emp是类,但e不是它的对象?如果是这样......在其他地方我看到了这个:

    cos如果是这样那么..在某处就像是

    Emp e = new Local(); 
    

    本地是Emp的子类。那么e在这种情况下意味着什么呢?它有什么作用?

8 个答案:

答案 0 :(得分:3)

一个对象本质上是一堆生活在堆中的内存。 (对象的部分内存结构包括对该对象的类的引用。)

Java中的对象变量(如本例中的e)包含 references 给生活​​在堆中的对象。

课程完全不同于所有这些课程;他们可能会描述该类型对象的结构,并且具有方法实现等,但是类与其他对象存在于完全不同的内存区域。

答案 1 :(得分:1)

Emp e

此语句创建一个引用变量' e'在堆栈中。

    new Emp()

此语句在堆中创建一个对象。一个对象只是一个缓冲区,或者我们可以说是一块内存"。因此,缓冲区在堆中保留。因此声明,

   Emp e=new Emp() 

将堆中创建的对象的引用ID传递给引用变量' e'。

答案 2 :(得分:1)

Emp{
int salary;
int name;
}

新的Emp(); Emp是一个类,new用于保留堆中的内存区域。new返回其保留的内存地址。 一旦您写入新的Emp(),就会在堆中保留一个内存缓冲区。此保留区的大小取决于类的数据成员的大小(此处为2个字节,因为int salal占用1个字节,而int name占用1个字节字节。)

参考ID 对象的参考ID是对象存储位置的地址。 new Emp(); 创建对象,但其地址未存储在任何地方。

参考变量 现在,假设您要一次又一次使用同一对象,那么您必须具有其地址位置(引用ID)。 为了存储其addressid(ReferenceId),可以使用参考变量。 引用变量始终占用4个字节,它们只是存储地址(对象的引用)的变量。

创建参考变量 Emp e2;

将参考ID分配给参考变量 Emp e2 = new Emp();

答案 3 :(得分:1)

这里:

Emp e=new Emp();

e是引用变量,它保存在堆区域中创建的对象的地址。

在对象的魔术方法(对象共有9种方法)(即toString()方法的帮助下,以哈希码的形式生成参考ID;在内部,使用对象的toString方法,它会为运行时创建的每个对象自动生成引用ID。

对象的内存始终保留在RAM的堆区域中。 bcz在Java中没有显式指针可用。在这里,ref变量指向堆栈,以引用对象以在Heap中保留内存; bcz对象也不知道内存在哪里。

堆栈段也是内存的一部分:当我们给ref变量时,ref变量必须已经存储在堆栈中,然后ref变量知道head的哪一部分内存是空闲的,它指向对象保留位置,并保存在引用变量中

'new'是可文本化的运算符,有助于创建对象。

Emp():是班级的子班级;如果程序员没有在Java程序中显式提供构造函数,则编译器会隐式添加一个默认构造函数,并且将子类名称指定为相同类名称的原因是,这样“ new”可以轻松地知道非类需要多少内存。静态数据成员。

答案 4 :(得分:0)

这是一个简单的问题......

emp e=new emp();

此处,e是对象的引用ID。 emp是类的引用变量,您的对象id与状态和行为的组合不同。

答案 5 :(得分:0)

我刚刚制作了一个显示对象参考ID的程序。

class abc
{

   int a=10;
   int b;
}

class t extends abc
{

   public static void main(String args[])
   {
     abc A=new abc();
     System.out.println(""+A);
   }
}

输出:令人震惊的十六进制字符串:

“ABC @ 52e922”

Java以十六进制字符串的形式将对象的实际位置映射到一个单独的位置,该字符串称为引用ID。它永远不会显示存储在内存中的对象的实际位置。

答案 6 :(得分:0)

Car c = new Car();

对象不是它只是堆中的缓冲区或内存,其中非静态数据成员获取内存。

引用ID由堆栈中的新运算符生成,它是一个内存位置,包含哈希码形式的对象的内存位置。引用ID是到达对象的唯一方法。生成引用ID是因为在java中有一条规则,即在运行时分配的内存没有任何名称,我们都知道对象是在运行时创建的,因此它们也没有名称,我们需要一个唯一的ID来对其执行操作对象,这就是为什么java中每个对象都有唯一的引用ID。

在上面的示例中,c是存储引用ID的引用变量。

答案 7 :(得分:-1)

对象不是它只是一个堆区域中的内存区域或缓冲区,其中一个类的所有实例数据成员都在获取内存。

Emp e = new Emp();

在上面的语句中e是一个引用变量,它保存了对象的引用id,但是为了安全起见,java不允许任何人获取实际对象的id它也可以自我解释,因为我们使用的是word引用重定向我们的id,我们没有获得对象的实际id,而只是它的引用。

也引用id将命名为对象的#code的classname @十六进制表示。