int[] arr = new int[10];
int[] arr2 = arr;
arr[1] = 10;
arr2[1] = 20;
System.out.println(arr[1]);

上面这串代码的输出结果是20.

这个结果我要深入到java中数据类型和数据存储原理了。java中有八种基本数据类型,分别是整型四种byte、short、int、long,浮点型两种float、double,布尔型一种boolean,字符型一种char,总共八种。要注意我们平时常用的String类型并不属于基本数据类型,如过查看源代码我们就会发现String类型实质上就是字符数组.除了这八种基本数据类型外,其余的数据类型都属于引用型数据类型。在定义变量时,如果是基本数据类型,jvm会在栈中开辟一个数据空间存放基本数据,变量直接引用这个数据。但是在其他数据类型时,当使用new这个关键字后,java会在栈中和堆中同时进行操作,在栈中声明变量,同时在堆内存中开辟数据空间用于存放数据,同时把这个数据空间的起始地址赋给栈中的变量。也就是说,这个变量直接引用了这个数据空间的地址。知道这个原理后,再来分析上面这几行代码,就可以发现:

  jvm首先在栈中声明了arr这个变量,并在堆中开辟了相应的空间大小,并把起始地址(我们假设是0x92)给arr,这样arr就记录了这块空间;

  当我们声明第二个变量arr2时,同时把arr的值赋给arr2时,jvm在堆中并没用开辟新的空间,而是直接将arr指向的地址0x92给了arr2,这样就形成了arr和arr2同时指向堆中同一片数据空间的局面,这样我们我们无论是对arr还是arr2进行操作,操作的都是堆中同一片数据空间里的数据,自然就会互相影响。

java中数组的数组问题的更多相关文章

  1. 在Java中怎样把数组转换为ArrayList?

    翻译自:How to Convert Array to ArrayList in Java? 本文分析了Stack Overflow上最热门的的一个问题的答案,提问者获得了很多声望点,使得他得到了在S ...

  2. Java中创建泛型数组

    Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...

  3. Java中方法与数组

    1:方法(掌握) (1)方法:就是完成特定功能的代码块. 注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法. (2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参 ...

  4. JAVA中list,set,数组之间的转换详解

    JAVA的list,set,数组之间的转换,主要是使用Apache Jakarta Commons Collections,具体的方法如下:import org.apache.commons.coll ...

  5. Java中List转换为数组,数组转List

    今天写代码遇到一个奇怪的问题,具体代码不贴出了,写一个简化的版本.如下: ArrayList<String> list=new ArrayList<String>();     ...

  6. Java中的自定义数组队列

    在Java中,作为所有数据结构中存储和获取速度最快的一种,数组凭借其这种简单易用的优势在各个方面都能大显神威.但是数组也有自身的局限性.数组的长度必须是固定的一旦定义之后就无法动态的更改,这就会造成这 ...

  7. Q:java中的泛型数组

     对于java,其是不支持直接创建泛型数组的.当采用如下的方式去创建一个泛型数组时,其会出现错误,编译无法通过的情况. package other.jdk1_5; /** * 该类用于演示泛型数组的创 ...

  8. JAVA中集合转数组遍历

    JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) {     ...

  9. Java中List与数组互相转换

    1.说明 在Java中,经常遇到需要List与数组互相转换的场景. List转换成数组,可以使用List的toArray()或者toArray(T[] a)方法. 数组转换成List,可以使用Arra ...

  10. java中Array(数组)的用法

    8.Array(数组)    数组是作为对象来实现的.(really occupy the memopry,真实的占用内存 ) An array is a data structure that st ...

随机推荐

  1. linux xz压缩解压

    1. 解压 xz 格式文件 方法一: 需要用到两步命令,首先利用 xz-utils 的 xz 命令将 linux-3.12.tar.xz 解压为 linux-3.12.tar,其次用 tar 命令将 ...

  2. http常用标签

    HTML标签大全(常用)   文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言. HTML之所以称为超文本标记语言,是因为文本中包含了所 ...

  3. 将Windows下的文件同步到Linux下

    需求:把Windows下的某些文件自动传送到Linux指定目录下 实现: 1. Windows下安装 WinSCP工具,并把Liunx服务器信息保存 2. 编写脚本,实现双击工具就把Windows下的 ...

  4. 代码测试:unsigned char*图像数据转换成OpenCV中Mat类型

    直接使用Mat的构造函数,把指针的位置赋给下面中的data就OK了: Mat(int rows, int cols, int type, void* data, size_t step=AUTO_ST ...

  5. xshell6,xftp下载

    https://www.netsarang.com/zh/free-for-home-school/

  6. Vue知识整理16:单文件组件

    过程较为复杂,这里直接写出视频地址,可以直接查看 https://learning.dcloud.io/#/?vid=14

  7. call 和 apply的定义和区别?

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  8. 第五周课程总结&试验报告(三

    实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is a test of java".按要求执 ...

  9. jQuery与JavaScript与ajax三者的区别与联系(转)

    原文链接:  https://blog.csdn.net/qq_43154385/article/details/85003484 通过阅读,对于三者关系有一个比较清晰的认知,对于后期深入学习大有裨益 ...

  10. Mysql函数----控制流函数介绍

    MySQL有4个函数用来进行条件操作的,可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台.   MySQL控制流函数: 1.CASE WHEN[test1] THEN [re ...