关闭

数组的对象性与数组复制

标签: java数组数组复制
109人阅读 评论(0) 收藏 举报
分类:

本文只说明两个问题:
1.数组的对象性
2.数组的复制

1.数组的对象性
数组定义:

int[] scores = new int[10];

在java中只要看到new,一定就是建立对象,这个语法代表了数组就是对象。如果想查看初始值可以点击链接。
然而,对象是根据类而建立的实例,代表建立数组对象的类定义在哪里呢?答案是由JVM动态产生的。某种程度上,可以将int[]这样的写法,看做类名称。
例子:看看下面的代码会显示什么?

int[] scores1 = {88, 81, 74, 68, 76};
int[] scores2 = scores1;
scores2[0] = 99;
System.out.println(scores1[0]);

因为数组是对象,而scores1 和scores2 是对象名称,将scores1 赋值给scores2 ,意思是将scores1 的地址复制给scores2 ,即scores2 也指向该数组。
scores2[0] = 99 的意思是,将scores2 指向的数组的索引0的值设置为99,因此无论谁调用,索引0的元素的值都会是99。

2.数组的复制
了解数组是对象,应该知道,以下代码不是数组复制:

int[] scores1 = {88, 81, 74, 68, 76};
int[] scores2 = scores1;

其作用只不过是将scores1 的地址复制给scores2 。如果要做数组复制,基本做法是另行建立数组,例如:

int[] scores1 = {88, 81, 74, 68, 76};
int[] scores2 = new int[scores1.length];
for(int i = 0; i < scores1.length; i++){
    scores2[i] = scores1[i];
}

通过建立长度相同的数组,逐一访问scores1每个元素,并指定给scores2对应的索引位置。
其实,有更方便的Arrays.copyOf( )方法:

import java.util.Arrays;

public class CopyArray {

    public static void main(String[] args) {
        int[] scores1 = { 88, 81, 74, 68, 76 };
        // 不用新建数组,Arrays.copyOf()会帮你建立
        int[] scores2 = Arrays.copyOf(scores1, scores1.length);
        for (int i = 0; i < scores2.length; i++) {
            System.out.print(scores2[i] + "\t");
        }
        System.out.println();
        scores2[0] = 99;
        // 不影响scores1指向的数组对象
        for (int i = 0; i < scores2.length; i++) {
            System.out.print(scores1[i] + "\t");
        }
    }

}

输出结果为

88  81  74  68  76  
88  81  74  68  76

3.在java中,数组一旦建立,长度就固定了。如果事先建立的数组长度不够怎么办?那就只好建立新数组,将原数组内容复制到新数组。例如:

// 如果数组长度不够了,就需要建立新数组,将原数组内容复制至新数组
        int[] score1 = { 88, 81, 74, 68, 76 };
        int[] score2 = Arrays.copyOf(score1, score1.length * 2);
        score2[score1.length] = 99;
        for (int i = 0; i < score2.length; i++) {
            System.out.print(score2[i] + "\t");
        }

输出结果为:

88  81  74  68  76  99  0   0   0   0
0
0
查看评论

JAVA中复制数组的五种方法

“=”,相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变. 使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点 使用clone方法,得到数组的值,而不是引用,不能复制指定元素,灵活性差一点 使用System.arraycopy(s...
  • shinecjj
  • shinecjj
  • 2016-07-26 17:18
  • 5037

java语言复制数组的四种方法

来源于牛客网的一道选择题: JAVA语言的下面几种数组复制方法中,哪个效率最高? A.for循环逐一复制 B.System.arraycopy C.System.copyof D.使用clone方法 效率:System.arraycopy > clone > Ar...
  • tingzhiyi
  • tingzhiyi
  • 2016-08-28 13:47
  • 11410

C#中怎么复制数组?C#复制数组的5种方法!

方法一:使用for循环int []pins = {9,3,7,2}int []copy = new int[pins.length];for(int i =0;i!=copy.length;i++){copy[i] = pins[i];}方法二:使用数组对象中的CopyTo()方法int []pin...
  • hfzsjz
  • hfzsjz
  • 2009-07-08 10:49
  • 3225

【java】数组复制几种方式比较

import java.util.Arrays; /** * System.arraycopy方法的使用。 * 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束 */ public class LessionSystemArraycopy { public ...
  • lzm18064126848
  • lzm18064126848
  • 2016-12-21 14:32
  • 345

一行代码完成js对象数组的深拷贝

1、对于普通数组(数组元素为数字或者字符串),深拷贝很简单,拷贝之后两个数组指针指向的存储地址不同,从而完成深拷贝 var _test = [1,2,3];//原数组 var _testCopy = [].concat(_test);//拷贝数组 _testCopy[0]=4; consol...
  • xiongqiangwin1314
  • xiongqiangwin1314
  • 2016-11-16 11:19
  • 2157

c语言把一个数组里面的部分值直接复制到另外一个数组

头文件是#include ,如果要从数组a复制k个元素到数组b,可以这样做memcpy(b,a,sizeof(int)*k);#include #include int main() { int a[5]={0,1,2,3,4}; int b[5]; memcpy(b,a,si...
  • u014574317
  • u014574317
  • 2016-03-29 11:14
  • 11366

如何利用C语言实现数组复制的功能

把数组src[ ]中的数据复制到dest[ ]中 /* 数组复制作业 */ #include void cpy(int *p_src,int *p_dest,int size){ int num = 0; for(num = 0;num <= size - 1;num++){ p_...
  • u013171437
  • u013171437
  • 2017-08-27 13:37
  • 747

java数组复制的效率

AVA语言的下面几种数组复制方法中,哪个效率最高? 正确答案: B   你的答案: D (错误) for循环逐一复制 System.arraycopy System.copyof 使用clone方法 ...
  • Stand1210
  • Stand1210
  • 2016-09-09 17:52
  • 1737

js--引用类型Array--3.数组简单复制和深度复制

js数组也是很重要的一块,所以准备对数组的操作等写一个系列。 1.第一部分是二元数组的基础知识。 http://blog.csdn.net/github_34514750/article/details/51049935 2.第二部分讲解数组的几种合并方法优劣比较 http://blo...
  • github_34514750
  • github_34514750
  • 2017-02-23 18:33
  • 3290

数组的几种复制方法

1、copyOf()  用法:Arrays.copOf(dataType[] Arrayname,int length)  其中Arrayname 代表的是要进行复制的数组(源数组),length代表的是复制后新数组的长度。  使用这个方法复制数组,默认的是从数组第一个元素开始复制。而length...
  • huanyuminhao
  • huanyuminhao
  • 2016-10-21 23:45
  • 2069
    个人资料
    • 访问:14414次
    • 积分:331
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:11篇
    • 译文:0篇
    • 评论:0条