【问题标题】:Understanding basic concept of object creation and reference variable了解对象创建和引用变量的基本概念
【发布时间】:2017-03-25 14:38:37
【问题描述】:

我们说什么我都理解

a=b

这意味着无论 b 中的值是什么,它都会转到 a。换句话说,无论 b 引用什么,它现在都指向 a 的内存位置。

考虑到当我说的时候

a=b-----1)
b=a-----2)

就内存寻址和存储在该内存位置的值而言,这意味着什么。

我知道引用是在堆栈内存中创建的,而对象是在堆内存中创建的。但我想更深入地了解这段代码的每一行实际发生了什么。

谁能更深入地解释一下对象创建和引用变量的这个基本概念。

public class ABC
{
        public Object add(Object a, Object b)
         {
           a=new Object();
           b=new Object();
           a=b;
           b=a;
           System.out.println("a= "+a);
           System.out.println("b= "+b);    
           ABC c=new ABC();
           return c;
        }
    public static void main (String[] args) throws java.lang.Exception
     {
       ABC cc=new ABC();
       Object c=cc.add(4,5);
       System.out.println("c= "+c);
     }
}

【问题讨论】:

  • 这太宽泛了。对于此类事情,您应该阅读一本书或教程。如果您的代码有特定问题,您应该更详细地解释它。

标签: java oop object reference


【解决方案1】:

Java 总是创建对象,除非堆上的基本对象,并且它保持对堆栈上该内存位置的引用。然后它会跟踪对该内存位置的所有引用,如果引用计数变为零,它会破坏对象。

现在,当您构造 a 和 b 时,它们将对两个对象有不同的引用(因为它们的构造方式都不同)但是当您将 a 分配给 b 时,a 将具有对第二个(b 的)对象的引用,从而使第二行自赋值(因为它们在内存位置具有相同的地址)。

【讨论】:

  • a=新对象();说对象正在创建位置 ob500 b=new Obeject();说对象正在位置 ob700 创建现在这意味着什么 1) a 现在指向 ob700 ?
【解决方案2】:

初始化原始变量与初始化引用变量不同,因为原始变量具有特定值。例如;

    int i = 5;
    int j = 20;
    i = j;
    j = 15;

如果您运行此代码,“i”变量的值不会改变,因为“i”包含“20”。变化的是变量“指向”的内容。换句话说,如果您要获取 i 的值,它将指向 j,即变量所在的位置。

但是引用显示或持有属于对象的地址。例如

    1  Object a = new Object();
    2  Object b = new Object();
    3  a = b;
    4  b = a;

在第一行和第二行中,您创建了两个对象。 “a”和“b”是用于跟踪其数据保存位置的引用。

第三和第四行只是改变对象的地址,而不是它的实际属性。它们是彼此的别名,这意味着它们不一定是具有相同值的两个对象,但本质上是用两个不同的变量(a 和 b)指向的同一个对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2017-03-31
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多