Java拷贝数组方法Arrays.copyOf()是地址传递的证明实例
在看别人的关于CopyOnWriteArrayList 这个类的时候,看到有人提出了关于:数组拷贝的方法Arrays.copyOf() 的问题,如下:
只是复制了引用地址,数组内的对象还是和旧数组一样的?
看了他的问题,我也是有点迷惑了,以前都没想过这个。既然如此,我就有如下的测试,以解心中之疑惑。
看代码名字,就是从其他地方获得三个student对象到这个数组里面,打印没复制之前的数组信息。然后修改新新数组的第0个学生的名字。然后再输出copy出来的数组和源数组,看看啥情况。
结果:
虽然copy出来的是新数组没错。
但是新旧数组都是指向同一个引用滴,哦 my god 。
所以最后的结论是:
Java 拷贝数组方法 Arrays.copyOf() 是地址传递。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
java读取excel文件并复制(copy)文件到指定目录示例
复制代码 代码如下: mport java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List; import org.apach
-
Java concurrency集合之CopyOnWriteArraySet_动力节点Java学院整理
CopyOnWriteArraySet介绍 它是线程安全的无序的集合,可以将它理解成线程安全的HashSet.有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet:但是,HashSet是通过"散列表(HashMap)"实现的,而CopyOnWriteArraySet则是通过"动态数组(CopyOnWriteArrayList)"实现的,并不是散列表. 和CopyOnWriteArrayList类似,CopyO
-
java并发容器CopyOnWriteArrayList实现原理及源码分析
CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的容器还有CopyOnWriteSet.本文会对CopyOnWriteArrayList的实现原理及源码进行分析. 实现原理 我们都知道,集合框架中的ArrayList是非线程安全的,Vector虽是线程安全的,但由于简单粗暴的锁同步机制,
-
JAVA 深层拷贝 DeepCopy的使用详解
方法实现很简单,提供两种方式:一种是序列化成数据流,前提是所有对象(对象中包含的对象...)都需要继承Serializable接口,如果都继承了那很容易,如果没有继承,而且也不打算修改所有类,可以用第二种方式. 第二种是将对象序列化为json,通过json来实现拷贝,这种方式需要用到net.sf.json.JSONObject.具体代码如下: 复制代码 代码如下: public class DeepCopy { /** * 深层拷贝 *
-
Java中的数组复制(clone与arraycopy)代码详解
JAVA数组的复制是引用传递,而并不是其他语言的值传递. 1.clone protectedObjectclone() throwsCloneNotSupportedException创建并返回此对象的一个副本."副本"的准确含义可能依赖于对象的类.这样做的目的是,对于任何对象x,表达式: x.clone()!=x为true,表达式: x.clone().getClass()==x.getClass()也为true,但这些并非必须要满足的要求.一般情况下: x.clone().equa
-
java用arraycopy实现多击事件
本文实例为大家分享了java用arraycopy实现多击事件的3种方法,供大家参考,具体内容如下 1.双击事件的实现 我们规定两次点击的事件间隔在500毫秒内为双击事件,这一值可以随意限定. bt_click.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(startTime!=0){ long endTime = System.currentTimeMillis(); i
-
java编程中拷贝数组的方式及相关问题分析
JAVA数组的复制是引用传递,而并不是其他语言的值传递. 这里介绍java数组复制的4种方式极其问题: 第一种方式利用for循环: int[] a={1,2,4,6}; int length=a.length; int[] b=new int[length]; for (int i = 0; i < length; i++) { b[i]=a[i]; } 第二种方式直接赋值: int[] array1={1,2,4,6}; int[] array2=a; 这里把array1数组的值复制给arra
-
Java拷贝数组方法Arrays.copyOf()是地址传递的证明实例
在看别人的关于CopyOnWriteArrayList 这个类的时候,看到有人提出了关于:数组拷贝的方法Arrays.copyOf() 的问题,如下: 只是复制了引用地址,数组内的对象还是和旧数组一样的? 看了他的问题,我也是有点迷惑了,以前都没想过这个.既然如此,我就有如下的测试,以解心中之疑惑. 看代码名字,就是从其他地方获得三个student对象到这个数组里面,打印没复制之前的数组信息.然后修改新新数组的第0个学生的名字.然后再输出copy出来的数组和源数组,看看啥情况. 结果: 虽然co
-
java 实现数组扩容与缩容案例
我就废话不多说了,大家还是直接看代码吧~ public static <T> T[] dilatationArray(T[] datas,int newlen) { //不能为负数 newlen = newlen<0?0:newlen; //生成一个新数组,并copy原值到新数组 return Arrays.copyOf(datas, newlen); } package testpro; import java.util.Arrays; /** * 数组扩容缩容 * 扩容之后扩容部分按
-
Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan
所谓复制数组,是指将一个数组中的元素在另一个数组中进行复制.本文主要介绍关于 Java 里面的数组复制(拷贝)的几种方式和用法. 在 Java 中实现数组复制分别有以下 4 种方法: Arrays 类的 copyOf() 方法 Arrays 类的 copyOfRange() 方法 System 类的 arraycopy() 方法 Object 类的 clone() 方法 下面来详细介绍这 4 种方法的使用. 使用 copyOf() 方法和 copyOfRange() 方法 Arrays 类的 c
-
5种Java中数组的拷贝方法总结分享
目录 1.for循环 2.调用clone()方法 3.Arrays类中的Arrays.copyOf()方法 4.copyOfRange()方法 5.System.arraycopy()方法 1.for循环 for循环拷贝是最简单直观的方法,循环访问当前数组的每一个元素,并复制到新数组的相应下标. 示例代码: 运行结果: 2.调用clone()方法 该方法是类Object类中的方法:使用clone方法进行拷贝时,是将arr中的所有元素都拷贝下来,不可以挑选. clone() 方法的返回值是 Obj
-
举例讲解Java中数组和字符串类型的使用方法
Java数组 数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数组的n-1维数组.下面以一维数组为例说明Java数组的用法. 1.数组声明 数组声明有如下两种形式(方括号的位置不同): int arr[]; int[] arr2; 2.数组初始化 数组初始化也有两种形式,如下(使用new或不使用new): int arr[] = new int[]
-
java删除数组中的某一个元素的方法
实例如下: package org.company.project.test; import java.util.Arrays; import java.util.Scanner; public class ArraysDelete { public static void main(String[] args) { //删除数组中的某一个元素的方法: //把最后一个元素替代指定的元素,然后数组缩容 Scanner sc =new Scanner(System.in); int[] arr =
-
java 源码分析Arrays.asList方法详解
最近,抽空把java Arrays 工具类的asList 方法做了源码分析,在网上整理了相关资料,记录下来,希望也能帮助读者! Arrays工具类提供了一个方法asList, 使用该方法可以将一个变长参数或者数组转换成List . 其源代码如下: /** * Returns a fixed-size list backed by the specified array. (Changes to * the returned list "write through" to the arr
-
Java动态数组添加数据的方法与应用示例
本文实例讲述了Java动态数组添加数据的方法与应用.分享给大家供大家参考,具体如下: 输入客户的姓名,客户的人数不定.待输入完成后,请打印出客户的名单,并定义一个方法查询客户是否在这些客户中. 代码示例: package com.jredu.ch06.exer; import java.util.Arrays; import java.util.Scanner; public class CustomBiz { public String[] custom; public void addNam
-
Java多维数组和Arrays类方法总结详解
一.数组的三种声明方式总结 public class WhatEver { public static void main(String[] args) { //第一种 例: String[] test1 = new String[6]; test1[0] = "数组0"; test1[1] = "数组1"; //第二种 例: String[] test2 = {"数组0","数组1","数组2",&quo
随机推荐
- php ZipArchive压缩函数详解实例
- ExtJS 2.0实用简明教程 之获得ExtJS
- Vue.js 父子组件通讯开发实例
- EJB基础知识(入门必看)
- [Oracle] 如何使用触发器实现IP限制用户登录
- PHP实现支持SSL连接的SMTP邮件发送类
- phpstrom使用xdebug配置方法
- vue 2.0项目中如何引入element-ui详解
- MYSQL的binary解决mysql数据大小写敏感问题的方法
- PHP 进程锁定问题分析研究
- js实现上传图片之上传前预览图片
- Bootstrap布局之栅格系统学习笔记
- 初探 SOA(补充)
- javascript cookie的简单应用
- javascript XML数据显示为HTML一例
- 配置Grunt的Task时通配符支持和动态生成文件名问题
- wordpress之wp-settings.php
- 免费的Linux在构建绿色校园网中的应用
- C#枚举类型和结构体详解
- 基于vue配置axios的方法步骤