【问题标题】:Will the byte array be assigned properly in this manner?字节数组会以这种方式正确分配吗?
【发布时间】:2016-08-03 22:09:02
【问题描述】:

我已经有一段时间没有接触编程了,现在正试图重新开始。

我遇到了一个执行赋值的演示代码,通过 for 循环从一个数组复制到另一个数组。我可以知道以下作业是否会产生错误?如果可以,是否有比 for 循环更清洁的方法?谢谢!

private byte[] key;   

public void setKey (byte[] newKey){
        this.key = newKey;

}

【问题讨论】:

  • key 将包含对newKey 的引用,因此您对key 所做的任何更改也会在newKey 中更改。
  • 我同意@Logan - 此代码使key 成为对作为参数传递给setKey() 的相同数组对象的引用。 (它不会复制数组本身。)这是否“会产生错误”取决于对数组的引用是否保留在代码中的其他任何位置,如果是,则如何使用多个引用。
  • 会不会报错?可能是?我们需要上下文。这不会复制数组,它只是创建对同一内存空间的另一个引用。
  • 我意识到“创建错误”会造成混乱。我应该有状态我想将数组从 newKey 复制到键。 @Abdullah Wasi 在下面回答了我的问题。谢谢大家的评论。

标签: java arrays variable-assignment


【解决方案1】:

使用以下方法分配数组

public void setKey (byte[] newKey){
    this.key = Arrays.copyOf(newKey, newKey.length);
}

您也可以查看this问题以获得更好的理解

【讨论】:

  • 如果不知道 OP 的代码应该用于什么,这实际上可能会导致问题,而不是解决问题。 (另外,copyOf() 的第二个参数应该是 newKey.length,而不是 key.length。)
  • 我只是在向他解释如何正确完成作业。更新了我的答案,谢谢 ted。
  • 但这可能不合适。存储对特定数组对象的引用而不是副本可能很重要。正如我所说,在不了解上下文的情况下,不可能说哪种方法是正确的。
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2010-11-21
  • 2015-04-13
  • 2012-07-28
相关资源
最近更新 更多