Java数组的克隆方法

2023-12-07

Java 中的 clone() 方法在数组上使用时到底返回什么? 它是否返回一个新数组,其中包含从原始数组复制的数据?

Ex:

int[] a = {1,2,3};
int[] b = a.clone();

当。。。的时候clone方法在数组上调用,它返回对新数组的引用,该新数组包含(或引用)与源数组相同的元素。

所以在你的例子中,int[] a是在堆上创建的单独对象实例int[] b是在堆上创建的单独对象实例。 (记住所有数组都是对象)。

    int[] a = {1,2,3};
    int[] b = a.clone();

    System.out.println(a == b ? "Same Instance":"Different Instance");
    //Outputs different instance

如果要修改int[] b这些变化不会反映在int[] a因为这两个是单独的对象实例。

    b[0] = 5;
    System.out.println(a[0]);
    System.out.println(b[0]);
    //Outputs: 1
    //         5

当源数组包含对象时,这会变得稍微复杂一些。这clone方法将返回对新数组的引用,该数组引用与源数组相同的对象。

所以如果我们有课Dog...

    class Dog{

        private String name;

        public Dog(String name) {
            super();
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }

我创建并填充一个类型的数组Dog...

    Dog[] myDogs = new Dog[4];

    myDogs[0] = new Dog("Wolf");
    myDogs[1] = new Dog("Pepper");
    myDogs[2] = new Dog("Bullet");
    myDogs[3] = new Dog("Sadie");

然后克隆狗...

    Dog[] myDogsClone = myDogs.clone();

数组引用相同的元素...

    System.out.println(myDogs[0] == myDogsClone[0] ? "Same":"Different");
    System.out.println(myDogs[1] == myDogsClone[1] ? "Same":"Different");
    System.out.println(myDogs[2] == myDogsClone[2] ? "Same":"Different");
    System.out.println(myDogs[3] == myDogsClone[3] ? "Same":"Different");
    //Outputs Same (4 Times)

这意味着,如果我们修改通过克隆数组访问的对象,则当我们访问源数组中的同一对象时,这些更改将反映出来,因为它们指向相同的引用。

    myDogsClone[0].setName("Ruff"); 
    System.out.println(myDogs[0].getName());
    //Outputs Ruff

但是,对数组本身的更改只会影响该数组。

    myDogsClone[1] = new Dog("Spot");
    System.out.println(myDogsClone[1].getName());
    System.out.println(myDogs[1].getName());
    //Outputs Spot
    //        Pepper

如果您大致了解对象引用的工作原理,就很容易理解克隆和修改如何影响对象数组。为了进一步了解参考文献和原语,我建议阅读这篇优秀的文章article.

源代码要点

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java数组的克隆方法 的相关文章

  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • 如何获得n个具有不同元素数量的数组的所有可能组合?

    我有一些在编程时未知的数组数量 也许是 3 或 4 或 7 每个数组都有一些元素 即 a 1 2 3 4 b 6 7 5 2 1 c 22 4 6 8 4 8 5 4 d e f g 我想通过从每个数组中采样一个数字来获得所有可能的组合 例
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • Fortran 子例程返回错误值

    嘿 我正在开发一个 Fortran 程序 遇到了一个奇怪的问题 当我尝试在调用特定子例程之前直接输出数组的某些值时 我得到了正确的值 然后 我尝试在启动子例程时输出同一数组的一些值 它们都是 0 我最终在子例程之后输出数组的值 并且这些值回
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO
  • hashcode 的默认实现为以相同方式构造的对象返回不同的值

    我在这里编写一个示例代码 public class Test private int i private int j public Test TODO Auto generated constructor stub public Test

随机推荐

  • 如何从文件路径中删除%20?

    file home ashu Music Collections randomPicks ipod 20on 20sep 2009 Coldplay Sparks mp3 如何转换像上面这样的字符串以获得可以传递到的正常文件路径open 功
  • 如何使用 mechanize 库执行 HEAD 请求?

    我知道如何使用 httplib 执行 HEAD 请求 但我必须对该站点使用 mechanize 本质上 我需要做的是从标头 文件名 中获取值 而不实际下载文件 有什么建议我可以如何实现这一点吗 Mechanize 本身仅发送 GET 和 P
  • 在 OfficeJS 中,您可以检索绑定对象的范围吗?

    针对 Word Online 但任何针对 Excel PPT 的指示也会有所帮助 本质上 是否可以将绑定对象内的文本视为范围 因此 能够选择全部并将插入符移动到开头 结尾 我设想代码具有以下效果 Office select myBindin
  • 如何从 python 中的另一个 .py 文件访问全局变量?

    我创建了两个文件 当我运行时a py 结果是 1 1 这是正确的 然而 运行b py 结果是没有 我如何获取请求的值b py a py requests def set value global requests requests 1 1
  • 创建一个大的虚拟文件

    我是这个社区的新手 也是 iOS 开发的新手 我希望有人能帮助我解决一些小问题 目前我正在为自己编写一个小应用程序 它应该创建一个非常大的虚拟文件 其中包含虚拟数据或单词或任何使它变大的东西 原因是 我想单击一个按钮 应用程序应该生成一个
  • 使用另一个 data.table 中的值更新 data.table 中的值

    我有一个包含大约 2500 万行的数据集 我正在获取这些行的子集并执行一个运行良好的函数 但是 我接下来需要做的是用新值更新原始数据集中的值 同时保留其余值 我确信这很简单 但我就是无法理解它 这是我正在处理的事情的简化版本 require
  • 无需 AJAX 将 JSON 文件从 jQuery 发送到 PHP

    所以 我是 javascript jquery 的新手 但我已经使用 PHP 足够长的时间了 我知道如何使用 PHP 从输入中获取数据 这非常简单 但是当尝试使用 jQuery 执行相同操作时 如何操作却超出了我的想象 现在我有这个脚本 还
  • JavaScript 中的 PMT

    我正在尝试编写与 EXCEL PMT 函数等效的代码 在 JavaScript 中 公式如下所示 function PMT ir np pv fv ir interest rate per month np number of period
  • nextTriggerDate() 不返回“预期”值,是否有其他方法来获取重复本地通知的下一个触发日期?

    在我的应用程序中 我允许用户安排重复的本地通知 我遇到的问题 基于环顾四周的任何其他问题 是 nextTriggerDate 始终将其返回值基于当前时间而不是安排通知的时间 我看到了在通知的 userInfo 中存储 日期 值的建议 但从通
  • ASP.NET Core 2.0 MVC - 如何从视图编译中排除某些文件夹?

    这是场景 我使用这段代码https iamrufio com 2017 09 08 rendering emails with razorviewengine in net core 2 0 感谢作者 将视图呈现为字符串 用于电子邮件 但是
  • 为什么 Borland 会在不同的 C 文件中使用同一对象的多个定义进行编译,而 GCC 却不会?

    我正在研究全局变量的行为 到目前为止 我认为全局变量的多重定义是一种非法的方式 并且必须得到一个错误 但是我从 Borland C C 编译器得到了意想不到的结果 而 GCC 给了我预期的结果 Code test1 c include
  • 为什么 FirebaseAuth.getInstance().getCurrentUser() 在 android 中返回 null 值

    我正在关注使用firebase发送图像的代码 我已经配置了 firebase 存储 url 数据库 url 数据库规则 true sha1 将 google services json 放置在应用程序文件夹中 但是当我调试代码时 it 用户
  • Apache Airflow 仅向列表中的第一个人发送 SLA 未命中电子邮件

    我使用 Apache Airflow 我希望它能够在 SLA 未命中时发送电子邮件通知 我将电子邮件地址存储为气流变量 并且我有一个 dag 其任务之一使用 EmailOperator 发送电子邮件 问题来了 因为当我向所有收件人运行发送邮
  • 如何在 geo URI Intent 启动的地图中显示标记?

    我有一个应用程序 我想通过启动具有特定地理坐标的 Google 地图来显示不同的位置 一次一个 由用户输入选择 我目前正在使用这个 当然具有真实的纬度和经度值 Intent intent new Intent Intent ACTION V
  • 如何为每个列名添加后缀(或前缀)?

    我想添加 x每个列名称的后缀 如下所示 featuresA myPandasDataFrame columns values x 我该怎么做呢 另外 如果我想添加x 作为后缀 解决方案会如何变化 以下是我认为添加后缀的最好方法 df df
  • 与菜单元素中的右“左三角形”对齐

    我构建 HTML CSS JS 菜单 并希望将箭头向右对齐以指出该元素是子菜单 我的问题是 在 Firefox 中 三角形 符号 显示在下一行而不是当前行 铬在两种情况下都表现良好 BTS中存在与我的情况类似的错误 https bugzil
  • JAI:如何从多页 TIFF 图像容器中提取单页输入流?

    我有一个将 PDF 文档转换为图像的组件 每页一张图像 由于该组件使用转换器生成内存中图像 因此它会对 JVM 堆造成严重影响 并且需要一些时间才能完成转换 我正在尝试提高转换过程的整体性能 并找到了一个具有 JNI 绑定的本机库来将 PD
  • jQuery CSS 悬停

    我有一个 CSS 菜单 当鼠标悬停在它上面时设置父 li 的颜色 它是子 ul 子菜单 基本上 当您将鼠标悬停在菜单上时 它会改变颜色并保持这种状态 直到您将鼠标移开菜单及其子菜单 看起来很好 我添加了一些 jQuery 代码来更改菜单项的
  • 如何让一个视图知道另一个视图的变化?

    假设您正在制作一个音乐库应用程序 您有一个包含流派列表的视图 另一个显示所选流派的内容 当用户单击列表上的流派时 其他视图中的内容应相应更新 为了最大限度地减少依赖性 最好的方法是什么 除了绘制各个流派的视图之外 我还没有找到任何其他地方可
  • Java数组的克隆方法

    Java 中的 clone 方法在数组上使用时到底返回什么 它是否返回一个新数组 其中包含从原始数组复制的数据 Ex int a 1 2 3 int b a clone 当 的时候clone方法在数组上调用 它返回对新数组的引用 该新数组包