gpt4 book ai didi

java - Object类引用如何接收原始类型数组基地址?

转载 作者:行者123 更新时间:2023-12-01 22:50:11 25 4
gpt4 key购买 nike

class Demo{
static void receive(Object temp){
System.out.println(temp);
}
}


class Test{
public static void main(String ... a){
int arr[] = new int[5];
Demo.receive(arr);
}
}

查看输出..

问题出现了,Demo类中的方法'receive(Object temp)'如何接收到的基地址原始整数类型数组。

如果 Object 类引用变量可以接收原始类型数组基地址,那么有一件事很明显,基地址必须是 Object 类类型或 Object 类类型的子类。

那么是否也存在一些用于基本类型数组地址的类?

enter image description here

最佳答案

The question arises how method 'receive(Object temp)' in Demo class can receive the base address of primitive integer type array.

Java 不允许纯 Java 应用程序查看或操作地址。

所以答案是不能。

<小时/>

如果您确实非常需要获取对象(包括数组)的地址,那么可以跳出纯 Java 进入 JVM 实现;例如使用 JNI 或 JNA 调用 native 代码,或使用 Unsafe 类。但如果你这样做,你需要非常小心。一个错误就可能导致 JVM 崩溃!!

此外,您不需要在普通程序中执行此操作。

<小时/>

If Object class reference variable can receive the primitive type array base address then one thing is clear that the base address must be of either Object class type or a sub class of Object class type.

如果您试图说(例如)int[]Object 的子类型,那么这是正确的。但您不需要诉诸涉及“基地址”的扭曲逻辑来推断这一点。它实际上是在 Java 语言规范中指定的。

例如:

4.3.2. The Class Object

The class Object is a superclass (§8.1.4) of all other classes.

All class and array types inherit (§8.4.8) the methods of class Object ...

JLS 中有更多关于对象、类、类型和数组之间关系的内容。

关于java - Object类引用如何接收原始类型数组基地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com