gpt4 book ai didi

java - 当引用类型相同时 - 数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:33 25 4
gpt4 key购买 nike

我正在阅读 JavaSE 6 specs ,那我做了个测试,解开一些疑惑。

Two reference types are the same run-time type if:

  • They are both class or both interface types, are defined by the same class loader, and have the same binary name (§13.1), in which case they are sometimes said to be the same run-time class or the same run-time interface.
  • They are both array types, and their component types are the same run-time type (§10).

运行下面的代码...

public class Test {
public static void main(String[] args) {
String str = "" + new String(" ");
String[] strArr = {str};
String[] strArr2 = {str};
System.out.println("strArr == strArr2 : " + (strArr == strArr2));
}
}

...我期待以下输出:

strArr == strArr2 : true

但是当前的输出是:

strArr == strArr2 : false

我错过了什么?

最佳答案

仅仅因为它们是同一类型,并不意味着它们是同一对象。

当你做的时候

String[] strArr = {str};
String[] strArr2 = {str};

您正在创建两个包含相同内容的数组,但数组本身是两个独立的对象。

它们是同一类型(字符串数组)但它们不是同一对象(引用 X 和引用 Y)。当您说 strArr == strArr2 时,您是在问它们是否是同一个对象(或者实例,如果您更喜欢该术语)。

您引用的 JLS 与您所谈论的内容处于不同的层次,它只是说 String[]String[] 是同一类型。

关于java - 当引用类型相同时 - 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32228593/

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