gpt4 book ai didi

Java 数组窄转换规则

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

根据JLS 7,5.1.6 Narrowing Reference Conversion

• From any array type SC[] to any array type TC[], provided that SC and TC are reference types and there is a narrowing reference conversion from SC to TC.

Object[] objArr = {"a","b","c"};
String[] strArr = (String[])objArr; // ClassCastException

在上面的例子中,objArr 和 strArr 都是引用类型,并且存在从 Object 到 String 的窄引用转换。

Object obj = "a";
String str = (String)obj;

但以下代码可以正常工作:

Object[] objArr = (Object[])java.lang.reflect.Array.newInstance(String.class, 3);
String[] strArr = (String[])objArr;

我想问一下java用来做转换的规则。据我所知,这两个示例之间的区别在于,在第一个示例中,objArr 是一个对象数组,其组件类型为 Object。第二个是一个包含字符串类型组件的对象数组。

请注意,我不是在问如何进行转换,也不要告诉我如何使用 Arrays.copyOf 或其他库进行转换。

最佳答案

Object[] objArr = {"a","b","c"};
String[] strArr = (String[])objArr;

问题是 {"a","b","c"} 这是一个 Object 数组,而不是 Strings.

这就像做如下的事情-

Object obj = new Object();
String str = (String) obj; //ClassCastException

以下情况也不异常(exception)-

Object[] objArr = new String[] {"a","b","c"}; //Which is the case when you are using reflection
String[] strArr = (String[])objArr; //No exception

这就像做如下的事情-

Object obj = new String();
String str = (String) obj;

关于Java 数组窄转换规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693072/

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