Java系列之数组
原文首发于微信公众号:jzman-blog,欢迎关注交流!
本来打算温习一下注解方面的内容作为今天的推送,但是来不及写了,那就一起来看一下数组,数组是用来存放一组具有相同类型数据的数据结构,通过下标来访问数组中的元素。
数组的定义
数组的定义主要有两种,一种是先指定数组的大小,然后根据数组元素下标进行赋值,另一种是直接创建一个数组并进行赋值,具体如下:
//1.定义大小为10的数组
int[] arrayA = new int[10];
int arrayB[] = new int[10];
arrayA[0] = 1;
arrayB[1] = 2;
//2.定义数组并赋值
int[] arrayC = {1,2,3,4,5};
数组本质
Java 中的数组实际上是一个类,因此两个数组变量可以指向同一个数组,观察如下代码:
int[] arrayD = {1,1,1};
int[] arrayE = arrayD;
arrayD[0] = 2;
System.out.println(arrayE[0]);
显然,执行上述代码结果肯定是 2,上述代码中,将数组 arrayD 的值指向 arrayE,其本质是两个数组 arrayD、arrayE 指向了同一块数组空间,当修改了 arrayD 中某一元素的值,相应的 arrayE 中对应元素值也发生了变化,具体如下图所示:
注意:当数组作为方法的参数传递时,相当于传递的是数组的引用,因此在方法中对数组的操作也会影响到原来的数组,这一点非常重要。
数组的复制
为了得到两个数组元素的每个值都相同的元素,我们可以使用 Java 提供的 arraycopy() 来实现,具体如下:
int[] arrayD = {1,1,1};
int[] arrayF = new int[3];
/复制数组
System.arraycopy(arrayD, 0, arrayF, 0, 3);
System.out.println(Arrays.toString(arrayF));
显然,上述代码执行完数组 arrayF 的值为 1、1、1,如果间接修改了数组 arrayD 中数组元素的值,则完数组 arrayF 的值为 2、1、1,这是结合上下文获得的结果。
下面顺便说一下 arraycopy 方法参数的含义,具体如下:
/**
* 复制数组
* @param src:原数组
* @param srcPos:原数组开始被复制的位置
* @param dest:目标数组
* @param destPos:目标数组开始的位置
* @param length:目标数组的长度
*/
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length) {
}
数组中好像要注意的东西也就这么多了,当然还有其他关于操作数组的 API ,上面遇到数组之间的赋值影响了原来数组的值,这也是之前自己没有注意到的,今天就写这么多。
可以选择关注微信公众号:jzman-blog 获取最新更新,一起交流学习!
Java系列之数组的更多相关文章
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- 【JAVA零基础入门系列】Day10 Java中的数组
什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...
- Java系列笔记(2) - Java RTTI和反射机制
目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...
- Java系列笔记(3) - Java 内存区域和GC机制
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
- Java系列笔记(6) - 并发(上)
目录 1,基本概念 2,volatile 3,atom 4,ThreadLocal 5,CountDownLatch和CyclicBarrier 6,信号量 7,Condition 8,Exchang ...
- 【转】O'Reilly Java系列书籍建议阅读顺序(转自蔡学庸)
Learning Java the O'Reilly's Way (Part I) Java 技术可以说是越来越重要了,不但可以用在计算机上,甚至连电视等家电用品,行动电话.个人数字助理(PDA)等电 ...
- 【转载】Java系列笔记(3) - Java 内存区域和GC机制
Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java ...
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...
随机推荐
- vue之initComputed模块源码说明
要想理解原理就得看源码,最近网上也找了好多vue初始化方法(8个init恶魔...) 因为也是循序渐进的理解,对initComputed计算属性的初始化有几处看得不是很明白,网上也都是含糊其辞的(要想 ...
- Flex实现九宫格
写一个靠谱的flex布局 <!DOCTYPE html> <html> <style> .block { padding-top: 30%; margin-top: ...
- 一起了解 .Net Foundation 项目 No.14
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. .NET Core .NE ...
- java后台生成并下载二维码
这个功能在项目开发中是很基础的,平时用到的也很多,这里简单记录一下,以便以后使用的时候参考 前提业务要求:前台页面展示数据,有下载按钮,点击下载,下载对应数据的二维码. 首先,在pom.xml文件中添 ...
- java中的while循环和do while循环
那么在讲解循环之前呢我们先来了解一下什么是循环 生活中的例子 车子的轮胎他就是一直在循环 马拉松跑到也是在循环 因为运动员不停的一圈一圈在跑这也是一个循环 那么我们为什么要学习循环呢? 下面看一个 ...
- Redis02——Redis内存数据如何保存到磁盘
在前一篇文章中,已经介绍了Redis的基础数据结构,这篇文章将继续介绍Redis的持久化原理. 简介 众所周知Redis的所有数据都存在于内存之中,这就会存在因内存问题而导致的数据丢失,为了避免这一问 ...
- C语言程序设计(一) 为什么要学C语言
第一章 为什么要学C语言 学编程的过程,其实就是学习怎样用编程语言说话,让编译器听懂的过程. 汇编语言缺少“可移植性” 除了机器语言和汇编语言以外,几乎所有的编程语言都被统称为高级语言,它的特点是更接 ...
- lesson01
题目: Action3: 统计全班的成绩 班里有5名同学,现在需要你用numpy来统计下这些人在语文.英语.数学中的平均成绩.最小成绩.最大成绩.方差.标准差.然后把这些人的总成绩排序,得出名次进行 ...
- echarts legend文字配置多个颜色(转)
困扰很久的问题终于解决了 oh yea! echarts legend文字配置多个颜色legend: {data: [{name:‘直接访问’,icon : ‘circle’,textStyle: { ...
- 【TIJ4】照例,每个分类的第一篇文章随便说两句
[其实没啥好说的,完].... 嘛,其实本来也就是放练习的地方. 如果说世界上的课本按练习难度分成两类,一类是像Weiss那种习题比内容难的,还有就是TIJ这种讲得详尽但是习题相对简单的了吧. 不过不 ...