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. JMS学习四(ActiveMQ消息过滤)

    一.消息的选择器 不管是在消息发送端设置消息过期时间还是在接收端设置等待时间,都是对不满足的消息有过滤的作用,那消息选择器就是为过滤消息而生的下面来看看消息选择器: ActiveMQ提供了一种机制,使 ...

  2. 官方转译:截止2018-12-10,chromedriver与chrome对应关系表

    谷歌驱动下载地址: http://npm.taobao.org/mirrors/chromedriver/ http://chromedriver.storage.googleapis.com/ind ...

  3. rollup的学习

    概述(Overview) Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序.Rollup 对代码模块使用新的标准化格式,这些 ...

  4. [LeetCode]-DataBase-Combine Two Tables

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...

  5. 第五周总结 & 实验报告(三)

    第五周总结 一.继承       1.类的继承格式 class 父类{} class 子类 extends 父类{} 2.扩展类的功能 class 父类{ 父类属性: .......... ..... ...

  6. C# 读取Excel中的数据到DataTable中

    原文地址:http://www.open-open.com/code/view/1420029490093 public DataTable ExcelToDS(string Path) { stri ...

  7. 1、Shiro简介以及整体架构

    1.Shiro概念和作用: 利用shiro可以快速完成权限管理模块的开发 Spring的官网也是用Shiro做安全管理的... Shiro整体架构: 可能你感觉上面的图片很乱,但是你一定要先大体有个印 ...

  8. SPEL 表达式解析

    Spring Expression Language 解析器 SPEL解析过程 使用 ExpressionParser 基于 ParserContext 将字符串解析为 Expression, Exp ...

  9. eclipse link方式安装插件安装不上

    只能要features和plugins两个文件夹,其他文件需要删除

  10. 阶段3 1.Mybatis_03.自定义Mybatis框架_1.自定义Mybatis的分析-执行查询所有分析