为什么以下代码中的 数组b 能更改 数组a里面的元素

问题描述

public class Array_Test { public static void main(String[] arge){ int[] a = {1,2,3,4,5}; int[] b; b = a; for(int i = 0; i<b.length; i++) b[i] = b[i]+1; for(int j = 0;j<a.length;j++) System.out.println("a["+j+"] ="+a[j]); }} 为什么输出a数组的结果是2,3,4,5,6,而不是之前的1,2,3,4,5,

解决方案

int[] a = {1,2,3,4,5}; int[] b; b = a; a=b,是一个引用赋值,结果是a和b都指向的是同一块内存区域,而不是另外拷贝了一个数组。数组是对象,是引用传递的。有些工具类可以实现数组的copy,如System等。
解决方案二:
去了解下原型模式会理解深刻点
解决方案三:
数组是对象,对象在赋值的时候传递的是引用(指向某一内存地址),b=a,表示b跟a是同一个引用,即b跟a指向的内存地址是相同的举例:有一个存折a对应“某一银行账户” 一张银行卡b=a ,那么b跟a都对应同一个银行账户,如果用银行卡(也就是b)去取了100块钱,那么存折(也就是a)里面当然也会少100快钱
解决方案四:
数组是一个对象,定义的a和b只是引用,执行 b = a时相当于让 b 这个引用也指向了 a 引用指向的数据对象,实际上就是a和b指向的是同一个对象,所以会有这样的结果

时间: 2024-09-17 04:38:24

为什么以下代码中的 数组b 能更改 数组a里面的元素的相关文章

代码中的dsn连接串一定要带uid 吗

问题描述 stringmyConnStr="DSN=ora9;UID=sbor;PWD=robs";//建立系统DSNOdbcConnectionmyConnection=newOdbcConnection(myConnStr);测试过,如果myConnStr="DSN=ora9"也就是不写uid,pwd,运行时会出错,"未处理的"System.Data.Odbc.OdbcException"类型的异常出现在system.data.dl

在java中定义了一个二维数组,这样做好像不对,输出时报错, 代码如下

问题描述 在java中定义了一个二维数组,这样做好像不对,输出时报错, 代码如下 我是想要定义一个二维数组,然后动态地给它赋值,应该怎么做不知道问题出在做么地方,请大神指导一下 ,代码如下: int[][] a = null; a[1] = new int[]{1,2,3}; System.out.println(a[1][1]); 解决方案 int[][] a = null; a = new int[5][];//第一维需要初始化 a[1] = new int[]{1,2,3};//这是第二维

二维数组-请问这段代码中最后输出元素的时候,有必要加个空格吗?

问题描述 请问这段代码中最后输出元素的时候,有必要加个空格吗? static void Main(string[] args) { int[,] score = new int[3, 5]; score[0, 0] = 103; score[1,4] = 80; for (int i = 0; i <3; i++) { for (int j = 0; j < 5; j++) { Console.Write(score[i, j] + " "); Console.WriteL

求教:下面的代码中为何手动抛出异常

问题描述 求教:下面的代码中为何手动抛出异常 栈的pop方法,我们这样写:int pop(){ return array[top--];}然后我看jdk源代码,写法相当于:int pop(){ if(top<0)throw new ArrayIndexOutOfBoundsException(); return array[top--];}然而即使没有增加的那句话,当top等于-1时,Java运行环境仍然会自动帮我们抛出ArrayIndexOutOfBoundsException,那么还要自己手

php下将多个数组合并成一个数组的方法与实例代码

1.合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: 复制代码 代码如下: array array_merge (array array1 array2-,arrayN) 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值.然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,

C++中通过模板向函数传递数组长度

我们知道,在C/C++中,向一个函数传递数组时,实际上传送的是这个数组的首地址,也即是一个指针类型.所以,在函数中,我们没有办法知道这个传递进来的数组的长度到底为多长,一个普遍的方法就是再增加一个参数,来记录传递进来的数组的长度. 不过在C++中,使用模板机制,可以很好地解决这个问题,如下面的代码所示: #include <iostream> using namespace std; template<class T, int N> void array(T (&param

Tiger中的注释,第1部分: 向Java代码中添加元数据

编程的一个最新的趋势,尤其是在 Java 编程方面,是使用 元数据.简单地说,元数据就是 关于数据的数据.元数据可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.许多元数据工具,如 XDoclet(请参阅 参考资料),将这些功能添加到核心 Java 语言中,暂时成为 Java 编程功能的一部分. 直到可以使用 J2SE 5.0(也叫做 Tiger,现在是第二个 beta 版本),核心 Java 语言才最接近具有 Javadoc 方法的元数据工具.您使用特殊的标签集合来标记代码,并执行

js中的对象声明方式以及数组的一些用法

 本文为大家介绍下js中的对象声明方式以及数组的一些用法,下面有个不错的示例,感兴趣的朋友可以参考下,希望对大家有所帮助  代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  <html>  <head>  <title> New Document &l

关于代码中的结构问题。

问题描述 关于代码中的结构问题. 请问 private final AppointmentBook appointmentBook;这句什么意思呢? 解决方案 这句的意思是声明一个私有的.final类型的变量appointmentBook,此变量只能在声明的类的内部被调用且一旦初始化便不可改变.AppointmentBook 应该是你自定义的类吧 解决方案二: qwe110110110 说的正确的 解决方案三: private AppointmentBook appointmentBook 如果