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. 使用idea上传项目到码云

    首先,基本流程是这样的:       1.在码云生成SSH公钥       2.在码云创建项目      3.克隆项目到本地      4.在本地创建项目      5.搭建本地仓库,关联远程仓库   ...

  2. Oracle-手工生成AWR

    运行awrrpt脚本 SQL> @?/rdbms/admin/awrrpt   Current Instance ~~~~~~~~~~~~~~~~      DB Id    DB Name   ...

  3. [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)

    题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...

  4. Java日期时间格式转换

    1.Date转String 将日期格式化成指定的格式 public static String stampToDate(Date date) { SimpleDateFormat simpleDate ...

  5. Oracle JET mobile 入门使用

    Oracle JET 框架能开发 window, Android, ios 的 WebApp .主要使用 Codova 来进行开发. 简单使用 Oracle JET 开发 Android webapp ...

  6. 一、基础篇--1.1Java基础-反射的用途和实现

    https://blog.csdn.net/SongYuxinIT/article/details/81872066 反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的 ...

  7. 【2】通过Ajax方式上传文件(图片),使用FormData进行Ajax请求

    HTML: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...

  8. Spring Cloud的几个组件

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

  9. Tensorflow 教程系列 | 莫烦Python

    Tensorflow 简介 1.1 科普: 人工神经网络 VS 生物神经网络 1.2 什么是神经网络 (Neural Network) 1.3 神经网络 梯度下降 1.4 科普: 神经网络的黑盒不黑 ...

  10. WebMvcConfigurer 与 WebMvcConfigurationSupport避坑指南

    我们知道,在Spring Boot 2.0后用自己的的配置类继承WebMvcConfigurerAdapter时,idea会提示这个类已经过时了. 通常情况下我们会采用下面两种代替方案: 实现WebM ...