java - 如果一个数组被分配给一个对象引用,那么对象引用指向什么?

标签 java arrays reference

在 Java 中,可以将数组分配给对象引用。

class Sample{
     public void access(){
     int a[]= {1,2,3,4};
     Object oRef = a;
  }
}

引用引用数组是什么意思?数组是许多元素,而引用是单个元素。那么这个引用是什么意思呢?第二个问题是,既然可以给数组赋一个引用,有没有办法通过引用来访问数组的元素?

最佳答案

在开始回答您的问题之前,让我们先弄清楚数组是 Java 中的“对象”。 因此,如果您说 int a[]= {1,2,3,4};,您将创建一个 int 数组类型的对象,并引用该对象,您将使用引用 a。那么现在,让我们回答您的问题:

1) 引用引用数组是什么意思?数组是许多元素,而引用是单个元素。那么这个引用是什么意思呢?

enter image description here

上图中,a是一个引用,存放在栈中,而实际的数组,即a 引用的对象存储在堆上。 每种数组类型都有一个类,因此 int[] 也有一个类。如果你很好奇,这里有一个代码片段可以证明我的上述陈述:

public static void main(String[] args)
{
    test(int[].class);
}

static void test(Class clazz)
{
    System.out.println(clazz.getName());
    System.out.println(clazz.getSuperclass());
    for(Class face : clazz.getInterfaces())
        System.out.println(face);
}

Credits对于上面的片段。 现在,很明显 JVM 在运行时自己生成这些类。 Java 中的每个类都是 Object 类的子类型。因此,Object 类型的reference 可以引用 int[] 类型的实例 我希望这清除了问题的第一部分。 现在,第二部分,

2) 有没有办法使用引用来访问数组的元素?

回答:是的是的。方法是:

int c[] = (int[])oRef;

当您编写上述语句时,您创建了一个类型为 int[] 的引用,并将该引用指向先前创建的类型为 int[] 的对象.通过说 (int[])oRef,您只是将 Object 类型的引用类型转换为 int[] 的父类(super class),它是子类。 所以现在上图会变成:

enter image description here

希望这能回答您的两个问题。

关于java - 如果一个数组被分配给一个对象引用,那么对象引用指向什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33950745/

相关文章:

java - 将 UTF-8 字节数组编码和解码为字符串

java - katalon无法连接MYSQL服务器

java - 在JAVA中按顺序将多个mp3文件连接成1个mp3文件

java - Java 井字游戏程序设计第 1 级

c++ - c++ 中 typedef 和模板的常量引用

java Reflect Modifiers参数

sql - 我可以计算 postgres 数组字段的出现次数吗?

c - 警告 : assignment makes integer from pointer without a cast, 排序参数

xamarin - 使用隐藏在 Xamarin.Forms 中的 C# 代码访问控件

reference - 循环变量前的 `&`有什么作用?