当前位置: 首页 > news >正文

java中数组问题_java中数组的数组问题

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进行操作,操作的都是堆中同一片数据空间里的数据,自然就会互相影响。

59e12aea2fd73a80f3df4009e5fe4e9a.png

相关文章:

  • Java中implies_Java FilePermission.implies(Permission p)示例
  • java8 计算时间差_java8-计算时间差的方法
  • java 编写shuffle方法_在java中为播放列表创建一个shuffle方法
  • java call by value_Java的call by value和call by reference的详细介绍
  • java udp jframe_java实现UDP通信
  • java代码执行顺序_Java基础-代码执行顺序(重要)
  • java jlist 添加滚动条_jlist的滚动条报错
  • matchcollection java_JAVA collection集合之扑克牌游戏实例
  • java 封闭实例_java – 不能访问类型为Server的封闭实例
  • ip 十进制 整型 java_java IP地址与十进制转换
  • java text只读_设置Edit Text只读
  • mysql 工具里直接修改sql结果数据_navicat for Mysql查询数据不能直接修改
  • python again语句_Python语句
  • java评卷系统_GitHub - Ju5ticeGit/ExamSym: 基于java的考试及阅卷系统
  • jmeter测试java_JMeter学习(十八)JMeter测试Java(二)
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Apache Zeppelin在Apache Trafodion上的可视化
  • emacs初体验
  • HTTP 简介
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Koa2 之文件上传下载
  • Laravel5.4 Queues队列学习
  • leetcode388. Longest Absolute File Path
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • oldjun 检测网站的经验
  • PAT A1092
  • PermissionScope Swift4 兼容问题
  • React Transition Group -- Transition 组件
  • uni-app项目数字滚动
  • VUE es6技巧写法(持续更新中~~~)
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 免费小说阅读小程序
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 删除表内多余的重复数据
  • 微服务框架lagom
  • 微服务入门【系列视频课程】
  • 小程序开发中的那些坑
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 再次简单明了总结flex布局,一看就懂...
  • kubernetes资源对象--ingress
  • 正则表达式-基础知识Review
  • ​configparser --- 配置文件解析器​
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ###C语言程序设计-----C语言学习(6)#
  • #162 (Div. 2)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (4.10~4.16)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (第27天)Oracle 数据泵转换分区表
  • (二)换源+apt-get基础配置+搜狗拼音
  • (二)正点原子I.MX6ULL u-boot移植
  • (分享)自己整理的一些简单awk实用语句
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (顺序)容器的好伴侣 --- 容器适配器
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)