Java中对于二维数组的clone

GitHub 镜像站点 国内访问 GitHub 有时会遇到速度慢或不稳定的情况,这时 GitHub 镜像站点就能帮上忙。它们通过代理或缓存机制,让你更顺畅地浏览仓库、下载资源甚至克隆代码。希望这些信息能帮你更顺畅地访问 GitHub 资源。下面表格汇总了一些常见的镜像站及其主要用途。 阅读详情

    昨天写Java的时候写了一行int[][] c = a.clone(),结果发现后续对c的操作同时也作用到了a上了,当时一脸懵逼啊,说好的clone呢,怎么引用又扯不干净了。单步调试看看,好家伙,还真的是……

    今天上网查了查,原来因为Java跟C/C++一样,没有二维数组,二维数组是一维数组的一维数组,用int[][] c = a.clone(),实际上是把a[0],a[1],a[2]给clone了一份给c,也就是把每一行的一维数组的引用拷贝了一份给c,但是这些引用所指向的内存空间还是原来那一块,并不是彻底的深拷贝,在后续对c的操作中还是会同时作用在a上。因此应该对每一行的一维数组分别进行clone,才是彻底的深拷贝。




测试代码:

package package2;

public class Test {
	public static void main(String[] args) {
		int[][] a = new int[3][3];
		int cnt = 0;
		
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				a[i][j] = ++cnt;
			}
		}
		
		int[][] b = new int[3][];
		
		for (int i = 0; i < 3; i++) {
			b[i] = a[i].clone();
		}
		b[0][0] = -1;
		
		System.out.println("a:");
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print(a[i][j] + " ");
			}
			System.out.println("");
		}
		System.out.println("");
		
		System.out.println("b:");
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print(b[i][j] + " ");
			}
			System.out.println("");
		}
		System.out.println("");
		
		int[][] c = a.clone();
		c[0][0] = -2;
		
		System.out.println("a:");
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print(a[i][j] + " ");
			}
			System.out.println("");
		}
		System.out.println("");
		
		System.out.println("c:");
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print(c[i][j] + " ");
			}
			System.out.println("");
		}
	}
}


将Keil中的变量数组导出 首先,写好导出数据的函数。 阅读详情

相关推荐

无人驾驶之车辆控制(1)纯跟踪(Pure Pursuit)算法与Stanley算法

目录引言1 Pure Pursuit纯几何跟踪算法1.1 车辆运动学自行车模型1.2 算法原理1.3 仿真测试2 Stanley算法2.1 算法原理2.2 仿真测试3 总结 引言 本文对Pure Pursuit以及Stanley control两种算法进行了调研以及初步的性能摸底。 1 Pure Pursuit纯几何跟踪算法 1.1 车辆运动学自行车模型 运动学是从几何学的角度研究物体的运动规律,...

zxxxxxxy的博客 2万+

Java二维数组的复制(三种方法,无clone())

方法一:直接拷贝数组的地址 int[][] array = {{1,2,3},{4,5,6}}; int[][] array2 = new int[2][3]; array2 = array; 此时是把array的地址给了array2,俩者指向同一块内存,所以,当其中一个数组的某个元素改变时,另一个数组的相对应元素也会发生改变。 方法二:for循环遍历拷贝 int[][] array = {{1,2,3},{4,5,6}}; int[][] array2 = new int[2][3]; for(int

Fiona20的博客 7049

微磁模拟实战指南:从OOMMF安装到首个3D模型运行

本文详细介绍了OOMMF微磁模拟软件的安装与使用,从环境配置到首个3D模型运行的完整教程。涵盖Windows、Linux和macOS平台的安装避坑指南,以及MIF文件编写、并行计算优化等实战技巧,帮助研究人员快速掌握这一开源工具在磁畴壁运动、磁滞回线等微磁学问题中的应用。

weixin_29294597的博客 153

java 基础——二维数组的拷贝

文章目录for 循环拷贝基本类型引用类型clone 方式拷贝基本类型引用类型System.arraycopy()基本类型引用类型Arrays.copyOf()基本类型引用类型总结 for 循环拷贝 基本类型 public static void main(String[] args) { int[][] array1 = {{10,10,10},{10,10,10}}; ...

Alyson_jm的博客 1794

中科蓝讯蓝牙耳机SDK实战:从目录解析到消息处理框架

本文深入解析中科蓝讯蓝牙耳机SDK的目录结构与消息处理框架,提供从硬件驱动到蓝牙功能定制的实战指南。重点剖析SDK核心模块如消息队列机制、按键事件处理及电量报告优化,并分享二次开发中的调试技巧与避坑经验,助力开发者高效完成TWS耳机功能定制。

weixin_30335575的博客 387

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 392

java 二维数组clone_java数组的clone方法

clone二维数组char[][]a = {{'.','.','9','7','4','8','.','.','.'},{'7','.','.','.','.','.','.','.','.'},{'.','2','.','1','.','9','.','.','.'},{'.','.','7','.','.','.','2','4','.'},{'.','6','4','.','1','.','...

weixin_31837611的博客 601

如何通过常规测井曲线识别砂岩、泥岩、碳酸盐岩和煤层

常规测井曲线通过不同岩性的物理性质差异识别砂岩、泥岩、碳酸盐岩和煤层。砂岩表现为低自然伽马(GR)、中等密度(RHOB)和声波时差(DT);泥岩以高GR、高中子(NPHI)和高DT为特征;碳酸盐岩显示低GR、高RHOB和低DT;煤层则具有极低RHOB、极高NPHI和DT的独特组合。综合GR与三孔隙度曲线(RHOB、NPHI、DT)可有效区分岩性,其中密度测井对煤层识别最可靠。电阻率(RT)曲线辅助判断流体性质,但需结合其他参数综合分析。

love code, love life. 2590

Java中二维数组的拷贝方式

二维数组的拷贝 1.直接拷贝数组地址 int [][]arr = {{1,2,3},{4,5,6}}; int [][]brr = new int [2][3]; brr = arr; 此时在内存中是 brr 将arr的地址拷贝了过来 2.for循环拷贝(深拷贝) for(int i = 0;i<arr.length;i++) {...

WALL.E 2320

FCC 首个扫地机器人豁免落地,Matic 凭什么抢先?

Matic获FCC首个扫地机器人豁免,实为提前布局的合规姿态。其产品在美国组装,并采用已认证射频模组,虽未达65%美国成分门槛,但已具备“本土制造”优势。豁免本质是对既有合规状态的确认,而非解救。此举在商业上放大品牌价值,抢占“安全、合规、本土”叙事高地,凸显供应链安全正取代技术标准成为监管核心。未来合规成本将攀升,规则主导权仍在FCC手中。

致力于lidar应用开发 97

基于加速科技ST2500的SN74HC00N芯片测试计划

实际上随着工艺的进步,器件内部和引脚间的绝缘氧化膜越来越薄,导致漏电流发生的概率更大,另外制造过程中的工艺缺陷导致的桥接,异物或封装过程中造成的芯片划伤、引裂,都会造成IC的漏电流偏大,有部分产品可能会表现出漏电流偏大,但功能正常,此类产品具有潜在的可靠性问题,漏电流测试的目的就是把具有此类缺陷的产品筛选出来,避免其流到最终产品造成更大的损失。漏电流的测试方法相对简单,就是根据产品手册或测试规范对被测引脚施加额定的电压,然后测量其输入或流出的电流是否符合相应的设计规范。74HC00引脚功能如表所示。

weixin_68288412的博客 1431

关于java中对于二维数组使用clone出错之后

今天写程序时遇到一个十分诡异的bug。在debug了很久之后,总是发现自己的算法整个过程是没有任何问题的,但是结果却一直不对,后来发现错误后,以为是自己对于拷贝的理解有误导致的。我开始认为对二维数组是进行的浅拷贝,导致出了问题。因此,我王大锤写了程序来测试我的想法,事实证明,这并不是浅拷贝或者深拷贝的问题,而在于对引用的理解。 public class Test { public sta...

wqisen's workspace 200

笔试题-2023-思特威-数字电路设计(CIS)【纯净题目版】

10 笔试题-2023-思特威-数字电路设计(CIS)【纯净题目版】

w0shishabi的博客 1471

Java对象的clone()以及对二维数组的深拷贝

Java对象的clone()以及对二维数组的深拷贝 最近踩了 Object.clone()的大坑,发现了拷贝的一些机制。 有关clone()方法以及实现对象的深克隆,参考: Java对象clone()方法 对二维数组实现深拷贝: ​ //克隆 this.arr 二维数组 int[][] newarr = new int[3][3]; int i = 0; for (int[] row : this...

嘻爹ccc的博客 850

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java 二维数组clone_关于java中对于二维数组使用clone出错之后

今天写程序时遇到一个十分诡异的bug。在debug了很久之后,总是发现自己的算法整个过程是没有任何问题的,但是结果却一直不对,后来发现错误后,以为是自己对于拷贝的理解有误导致的。我开始认为对二维数组是进行的浅拷贝,导致出了问题。因此,我王大锤写了程序来测试我的想法,事实证明,这并不是浅拷贝或者深拷贝的问题,而在于对引用的理解。public class Test {public static voi...

weixin_29218963的博客 191

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

当Java的二维数组遇上clone

二维数组的正确copy方法是public int[][] clone(int[][] arr) { int[][] fuckthem = new int[arr.length][arr[0].length]; for (int i = 0; i < arr.length; i++) { fuckthem[i] = arr[i].clone();

薛定谔的猫窝 1112

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java二维数组不能用clone

前几天一直纠结一个关于java 二维数组的问题:在递归函数里将一个二维数组放到list里面,本来很简单的几行代码但是跑出来的结果就是不对。二维数组的clone函数返回来的数据并不是新分配的堆内存,而是对之前的二维数组的一个引用。代码如下: [code="java"] import java.util.ArrayList; import java.util.List; pub...

crackajack123的博客 259

java 二维数组clone,复制使用.clone()的二维数组仍然引用原始数据

Okay, I know this question has been asked before: Previous QuestionI have also looked into a few other threads and websites and they all seem to create more questions than answers.Josh Bloch on Design...

weixin_30477489的博客 169

Java中二维数组和一维数组的clone

要实现深度复制,可以用clone或者System.arrayCopy 如下面的代码 1 int[] a={3,1,4,2,5}; 2 int[] b=a.clone(); 3 b[0]=10; 4 System.out.println(b[0]+” “+a[0]); 输出为10 3 可见改变了b的值,但是没有改变a的元素的值但是clone和System.arrayCopy都是对一

WALLEZhe的博客 5116

Java array[][] .clone() 二维数组和一维数组不同

二维数组若想达到一维数组的clone()的效果,不能简单的, array.clone(); 而是需要实现新的方法,如下:  public boolean[][] clone(boolean array[][]){     boolean[][] result = new boolean[array.length][array[0].length];     for(int i = 0;i

chanllen的专栏 569

Java中的clone踩过的坑

clone方法 首先介绍一下clone方法 clone方法是用在你想新建一个对象,并且在改变新建对象的属性的时候不改变原有对象的属性 如果使用=是做不到的 例如 int[] c=new int[2]; int[] d=c.clone(); int[] e=c; System.out.println("c[0]="+c[0]); System.out.println("d[0]="+d[0]); System.out

Polaris的博客 838

java 二维数组 arraycopy_Java对数组的复制

定义一个数组int[] a={3,1,4,2,5}; int[] b=a; 数组b只是对数组a的又一个引用,即浅拷贝。如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopyint[] a={3,1,4,2,5};int[] b=a.clone();b[0]=10;System.out.println(b[0]+" "+a[0...

weixin_39754603的博客 566

关于二维数组的复制和比较

在做题时发现,直接使用=号赋值数组,当原数组改变时,被赋值的数组也会改变。 故尝试使用clone()方法赋值。 结果发现,虽然数组中的元素是相同的,但是使用equals进行比较时,得到的结果却是false。 int[][]num2 = new int[3][3]; int[][] num1 = new int[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { num1[i][j]

weixin_44198070的博客 566

java 数组拷贝 效率_java二维数组拷贝效率比较

在使用数组的时候,一般而言拷贝其它的数组,比直接自己新建一个数组要快得多。这也是拷贝在数组中频繁使用的原因,这里介绍几种拷贝数组的方法:for循环、clone()和Arrays.arraycopy。至于哪种方法能够最快的拷贝数组,还需要在下面的学习中寻找答案,一起来看如下内容。1.for循环public static void show1(int[][] array){for(int i = 0;...

weixin_42361133的博客 293

clone数组 一维二维大不同

数组b=数组a.clone(); 对于一维数组,改变一个的值不会影响另一个,是深拷贝(我们一般想要的真拷贝) 对于二维数组,clone后是同一个地址,修改一个另一个也会改变 做题发现的,算是有点坑吗? 有篇博客是这样解释的:因为java中没有二维数组的概念,只有数组的数组。所以二维数组a中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制 ...

csys优快云的博客 235

java 二维数组clone_java - 如何添加java.util.Scanner类以读取输入项的二维数组? - 堆栈内存溢出...

我有一个关于使用java.util.Scanner类读取浮点输入的二维数组的问题,我试图在Internet上找到它,但是仍然无法正常工作。 该代码向我显示了错误。 任何人都可以为我检查我错了哪一部分? 下面是我的代码:import java.util.Scanner;public class CloneTwoDarray {public static float[][] clone(floa...

weixin_35347870的博客 401
上一篇: 历届试题 PREV-34 矩阵翻硬币
下一篇: 蓝桥杯 历届试题 九宫重排 BFS Java
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值