【问题标题】:StringBuffer array fails where String worksStringBuffer 数组在 String 工作的地方失败
【发布时间】:2023-03-14 04:15:01
【问题描述】:

我试图了解初始化 Strings 和 StringBuffer 之间的根本区别 以下代码工作正常。 (al 是 ArrayList<String>

String[] sa = new String[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());

但是,当我使用 StringBuffer 数组时,它不会工作。

StringBuffer[] sa = new StringBuffer[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());

它给了我以下异常

java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at practice.ArrayListDemo.main(ArrayListDemo.java:34)

有人可以帮我理解逻辑/原因吗?目前尚不清楚字符串是不可变的有何不同。

【问题讨论】:

  • 不变性与它无关。您正在尝试混合数组类型。

标签: java string exception stringbuffer


【解决方案1】:

你是如何定义 al 的?它的类型是否正确 - StringBuffer?当我执行以下操作时没有问题:

    List<StringBuffer> al = new ArrayList<StringBuffer>();
    StringBuffer[] sa = new StringBuffer[al.size()];
    System.arraycopy(al.toArray(), 0, sa, 0, al.size());

【讨论】:

  • 不,我犯了一个错误。我的数组列表是用字符串初始化的。
【解决方案2】:

由于您已将 al 声明为 ArrayList&lt;String&gt;,我们可以放心地假设您已在其中存储了 String 对象。

这里

StringBuffer[] sa = new StringBuffer[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());

您正在尝试将 String 元素复制到 StringBuffer 数组中。这不起作用,因为String 不是StringBuffer 的子类型。

【讨论】:

  • 是的,非常感谢。我刚刚明白 arraycopy 方法抛出了类型不匹配的异常。
  • +1 这是提供解决方案背后实际推理的唯一答案。
猜你喜欢
  • 2014-08-08
  • 2010-09-15
  • 2017-05-26
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多