数组的复制(test2.java、test3.java)

  对于数组的复制,在最开始的时候最容易犯的一个错误,那就是自己认为的申请一个数组,然后将已存在的数组赋值到新申请数组名上,这样是错误的,这样仅仅是将数组的地址复制了过去,并不是,将数组内的元素拷贝过去,这样的复制在C\C++中叫做浅拷贝。

  同样话不多说,上代码。

  

一个典型的错误例子(test2.java):
-------------------------------------------------------------------------------

public class test2
{
    public static void main (String [] args)
    {
        int [] arr1 = {1,2,3,4,5};

        //注意:这里不是数组的复制,而是地址复制,即arr1与arr2指向同一块地址空间
        int [] arr2 = arr1;

        arr2[2]=10;

        for(int num : arr1)
        {
            //输出结果为:1 2 10 4 5
            System.out.print(num+"\t");
        }
    }
}
-------------------------------------------------------------------------------

  那么既然已经知道了错误的原因,那么就能从根源上,解决这个问题了,这里提供两种方案。

  第一种方案:

  

 1 一种解决方案(test3.java):
 2
 3 -------------------------------------------------------------------------------
 4 //数组的复制
 5
 6 public class test3
 7 {
 8     public static void main (String [] args)
 9     {
10         int [] a = {1,2,3,4,5};
11
12         int len = arr1.length;
13         int [] arr2 = new int [len];
14         for(int i=0 ; i<len ; i++)
15         {
16             arr2[i] = arr1[i];
17         }
18
19         //上面的写法相当于下面这个方式
20         //int [] arr2 = (int[])arr1.clone();
21
22         arr2[2] = 10;
23
24         for(int num : arr1)
25         {
26             //打印结果:1 2 3 4 5
27             System.out.print(num+"\t");
28         }
29
30         System.out.println();
31
32         for(int num : arr2)
33         {
34             //打印结果为:1 2 10 4 5
35             System.out.print(num+"\t");
36         }
37     }
38 }

  第二种方案,详见下篇文章。

原文地址:https://www.cnblogs.com/zglbt/p/8934441.html

时间: 2024-10-08 09:16:07

数组的复制(test2.java、test3.java)的相关文章

java中数组的复制

数组复制使我们在编程过程中常常要使用到的,在java中数组复制我们大概可以分为两种,一种是引用复制,另一种就是深度复制(复制后两个数组互不相干). 下面我们就通过测试的方法来详细看看什么是引用复制和深度复制. 引用复制: 顾名思义就是其值是引用的,值得改变会随着被引用的对象改变. System.out.println("引用复制-----------------------------"); int[] e = {1,2,3,4,56,7,8}; int[] f = e; for(in

java 数组的复制

java数组的复制分为数组地址的复制和值的复制 地址的复制: int []arrA={11,22,33,44}; //创建一个数组 int [] arrB=new int[5]; System.out.println("拷贝地址(引用)之前"); System.out.println("arrA="+arrA); System.out.println("arrB="+arrB); //引用的拷贝 arrB=arrA; System.out.pri

Java小练习 数组的复制,反转及查找(线性,二分)

/* 算法: 数组的复制,反转,查找(线性查找,二分查找) */ import java.util.Scanner; public class arrayCopyReverseSearch { public static void main(String[] args) { String[] arr = new String[]{"AA", "BB", "CC", "DD", "EE", "FF&

高级的数组的复制(test4.java)

这里指的高级,并不是过么高大上,而是说我们可以调用系统函数,直接对数组进行复制,并且这个函数的强大并不止局限于,对数组的复制,而且可以对数组进行截取,在指定位置插入或删除某个元素. 本篇只介绍数组的复制,其他的操作将在后续文章中进行阐述. 将一个数组复制到另一个数组去,采用 System.arrycopy() 方法的参数说明: System.arrycopy(from,fromstart,to,tostart,count) 1 //将A数组值复制到B数组中 2 3 public class te

去掉有序数组中重复数字 原地 leetcode java (最简单的方法)

1.利用荷兰国旗的思路,每次记住最后一个位置,遇到一个不重复的数,放在它后面,代码很简单. Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with consta

Java基础-输入输出-3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。

3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc. try { FileInputStream in = new FileInputStream("e:/TextRw.txt"); FileOutputStream out = new FileOutputStream("e:/2012412440张伟.txt"); int i =0; byte[] b1 = new by

Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 - 转载请保留该原文链接) 07/19/12 03:08:05 PM 在Jedis开发中,我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来.Redis的key和value都支持二进制安全的字符串,存储Java对象不是问题,下面我们看一下如何来实现. 1要存储的对象 现在写一个

数组求最大最小值和排序java实现

public class ArrayDemo05 { public static void main(String[] args) {     int list01[]={67,89,87,69,90,100,75,90};     int max;     int min;     max=min=list01[0];     for(int i=0;i<list01.length;i++){         if (list01[i]>max)             max=list01

【Java】Java垃圾回收机制

Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理.顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间)?在目前的商业虚拟机中,有哪些典型的垃圾收集器?下面我们就来逐一探讨这些问题.以下是本文的目录大纲: 一.如何确定某个对象