gpt4 book ai didi

java - 这个 : [Ljava. lang.Object; 是什么?

转载 作者:IT老高 更新时间:2023-10-28 11:26:30 43 4
gpt4 key购买 nike

当我对从函数调用收到的对象调用 toString 时,我得到了这个。我知道对象的类型编码在这个字符串中,但我不知道如何读取它。

这种编码方式叫什么?

最佳答案

[Ljava.lang.Object;Object[].class 的名称,java.lang.Class表示Object的数组类。

命名方案记录在 Class.getName() :

If this class object represents a reference type that is not an array type then the binary name of the class is returned, as specified by the Java Language Specification (§13.1).

If this class object represents a primitive type or void, then the name returned is the Java language keyword corresponding to the primitive type or void.

If this class object represents a class of arrays, then the internal form of the name consists of the name of the element type preceded by one or more '[' characters representing the depth of the array nesting. The encoding of element type names is as follows:

Element Type        Encoding
boolean Z
byte B
char C
double D
float F
int I
long J
short S
class or interface Lclassname;

您是该列表中的最后一个。以下是一些示例:

// xxxxx varies
System.out.println(new int[0][0][7]); // [[[I@xxxxx
System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx
System.out.println(new boolean[256]); // [Z@xxxxx

数组上的toString()方法之所以返回这种格式的String是因为数组没有@Override继承自的方法Object,具体如下:

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())

注意:您不能依赖任意对象的 toString() 来遵循上述规范,因为它们可以(并且通常这样做) @Override 它返回别的东西。检查任意对象类型的更可靠的方法是调用 getClass()在它上面(继承自 Objectfinal 方法),然后是 reflecting在返回的 Class 对象上。不过,理想情况下,API 应该被设计成不需要反射(参见Effective Java 2nd Edition,Item 53:Prefer interfaces to reflection)。


关于数组更“有用”的 toString

java.util.Arrays为原始数组和 Object[] 提供 toString 重载。还有 deepToString 您可能希望用于嵌套数组。

这里有一些例子:

int[] nums = { 1, 2, 3 };

System.out.println(nums);
// [I@xxxxx

System.out.println(Arrays.toString(nums));
// [1, 2, 3]

int[][] table = {
{ 1, },
{ 2, 3, },
{ 4, 5, 6, },
};

System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]

System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]

除了许多其他与数组相关的实用方法之外,还有 Arrays.equalsArrays.deepEquals 可以通过其元素执行数组相等性比较。

相关问题

关于java - 这个 : [Ljava. lang.Object; 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442090/

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