Java由浅入深细数数组的操作
目录
- 1.JVM的内存分布
- 2.引用类型变量的特点
- 3.一维数组的使用
- 3.1定义和初始化
- 3.2数组的访问
- 3.3打印数组所有的元素
- 3.4数组的拷贝
- 3.5作为参数和返回值
本篇介绍一维数组以及相关操作,二维数组放在下一篇
1.JVM的内存分布
Java的代码是运行在JVM上的,为了方便管理,对所使用的内存按照功能的不同进行了划分,这不是本篇重点,只做简单的介绍:
Java虚拟栈:局部变量在这里开辟空间
Java本地方法栈:运行一些由C/C++编写的程序
堆:对象在这里存储,且开辟后的空间使用完毕后Java会自动收回,不需要我们再写free
程序计数器:存储指令
方法区:存储静态变量、类、常量等
之前的int、double等都是在Java栈中开辟空间,而数组则是在堆上开辟的空间
2.引用类型变量的特点
引用类型变量并不会直接存储对象本身,它所存储的是对象本身在堆中的首地址,通过地址来操作对象,假设有一个数组arr,数组中有1~5共5个元素,数组起始地址是0x0001,那么这个数组在JVM中的存储情况如下:
基本类型的数据空间中保存的都是初始化的值,这也是二者之间的区别
3.一维数组的使用
3.1定义和初始化
一维数组的定义和初始化如下:
int [] arr1 = {1,2,3,4,5};int [] arr2 = new int [] {1,2,3,4,5};int [] arr3 = new int [5]; //数组元素的值默认为0
同Java中的int等变量一样,数组也必须进行初始化,若数组初始化不知道给多大空间,元素给什么值,那么可以先赋值null
null在Java中表示空引用,int [] arr=null 就说明arr引用的是一个空对象,这个要和C语言中的NULL区分开来
3.2数组的访问
依旧是通过下标来对数组进行访问,下标还是从0开始,有一点和C语言不同
假设数组有10个元素,我们打印第11个元素,C语言中会打印随机值,但在Java中则是直接报错
3.3打印数组所有的元素
在打印之前有一个问题需要解决:如何确定数组的长度
Java中没有给类似C语言中的sizeof的操作符,而是采用“数组名.length”来求数组长度,如下图:
现在来看看我们有多少种打印数组所有元素的方式:
循环语句:这个就不展开讲了,过于简单foreach
具体结构如下:
冒号左边写打印的元素的数据类型,右边写数组名
Array.toString
这个是将数组的内容转换成字符串,这样就可以按照打印字符串的方式来打印,使用前要引用包(类似C语言中的引用头文件)
引用方法:import java.util.Arrays
3.4数组的拷贝
循环语句:依旧跳过
Arrays.copyOf()
此方法返回值是数组,有两个参数,分别是拷贝的目标和拷贝的数组的长度
System.arraycopy()
此方法有5个参数,从左至右依次是:源数组、源数组的起始位置、目标数组、目标数组的起始位置、拷贝的元素个数
数组名.clone()
3.5作为参数和返回值
Java中的数组可以作为返回值,这没有什么需要注意的地方
数组作为参数,因为变量存放的是地址,所以在实参传参的时候实际上是将地址传递过去, 形参接收的也是地址,形参通过地址可以对堆上的数组进行操作
一维数组内容结束,完
到此这篇关于Java由浅入深细数数组的操作的文章就介绍到这了,更多相关Java数组内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Java自定义数组列表的实现操作
主要目的: 解决ArrayList 类不能改变大小的问题,主要实现数组列表动态调整大小. 1.数组类型如何选择?由于我们不清楚数组中具体存入什么类型的数据, 我们可以声明一个对象Object [ ] ,这样,数组列表就可以存储任何类型的数据了. 2.泛型<> :如果定义的一个类或接口有一个或多个类型变量,则可以使用泛型. ArrayList<String>本身就是泛型,各种类型的变量都可以组装成对应的List,而不必针对每个类型分别实现一个构建ArrayList的类. 泛型字母所代
-
9个java数组常用操作实例
数组的特点: 数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来唯一确定数组中的元素.根据数组的维度,可以将其分为一维数组.二维数组和多维数组等. 总的来说,数组具有以下特点: 数组可以是一维数组.二维数组或多维数组. 数值数组元素的默认值为 0,而引用元素的默认值为 null. 交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null.交错数组元素的维度和大小可以不同. 数组的索引从 0 开始,如果数组有 n
-
Java实现的数组去重与排序操作详解
本文实例讲述了Java实现的数组去重与排序操作.分享给大家供大家参考,具体如下: 这里演示Java实现数组去重.排序操作 文中的示例源码编写基于Jdk1.6+.junit4.8.2 java.util.Arrays.sort() 支持对int[],long[],short[],char[],byte[],float[],double[],Object[]进行排序 参考示例代码片段如下 // 声明int 数组,并初始化 int[] intArry = {5,4,7,8,2,0,1,9,3,6,10
-
Java使用反射操作数组示例
本文实例讲述了Java使用反射操作数组.分享给大家供大家参考,具体如下: 一 实战 1 代码 import java.lang.reflect.*; public class ArrayTest1 { public static void main(String args[]) { try { // 创建一个元素类型为String ,长度为10的数组 Object arr = Array.newInstance(String.class, 10); // 依次为arr数组中index为5.6的元
-
JAVA复制数组和重置数组大小操作
翻看印象笔记发现自己整理过arraycopy()这样一个方法,码字放到这里: System.arraycopy()是一个静态方法,用来实现重置数组操作 数组复制方法调用和参数列表: System.arraycopy(src, srcPos, dest, destPos, length); src:原数组 srcPos:原数组的开始位置 dest:目标数组 destPos:目的数组的开始位置 length:复制长度 数组复制代码示例: //originalArray 数组全部复制到targetAr
-
Java编程中二维数组的初始化和基本操作实例
Java二维数组的声明和初始化 1.二维数组可以看成以数组为元素的数组: 2.Java中二维数组的声明和初始化应按照从高维到低维的顺序进行. 实例: 静态初始化: Array2.java: 程序代码 public class Array2 { public static void main(String args[]) { int a[][] = {{1,2},{3,4,5,6},{7,8,9}} ; for(int i=0 ; i <a.length ; i++) { for(int j=0
-
java数组及arrays类对数组的操作实例
数组的初始化有两种方式 静态初始化: 初始化时由程序员显示置顶每个数组的初始值,由系统决定数组长度.如: int[] a1 = new int[] {1,2,3,4}; 动态初始化:初始化时由程序员只指定数组长度,由系统为数组元素分配初始值.如: int[] a = new int[5]; 写一个类测试一下 package chenlizhi; import java.util.Arrays; public class TestArrays { public static void main(S
-
java数组的初始化及操作详解
数组的基本概念 如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如下: int i1, i2, i3, ... i100; 但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你要编写System.out.println()语句100次. 其实所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作.数组本身属于引用数据类型,那么既然是引
-
JAVA对象和字节数组互转操作
0x01 创建要转换的类和主函数 注意这里一定要实现序列化 package day1; import java.io.Serializable; public class Test360 implements Serializable { @Override public String toString() { return "Test360{" + "name='" + name + '\'' + '}'; } String name="test&quo
-
Java由浅入深细数数组的操作
目录 1.JVM的内存分布 2.引用类型变量的特点 3.一维数组的使用 3.1定义和初始化 3.2数组的访问 3.3打印数组所有的元素 3.4数组的拷贝 3.5作为参数和返回值 本篇介绍一维数组以及相关操作,二维数组放在下一篇 1.JVM的内存分布 Java的代码是运行在JVM上的,为了方便管理,对所使用的内存按照功能的不同进行了划分,这不是本篇重点,只做简单的介绍: Java虚拟栈:局部变量在这里开辟空间 Java本地方法栈:运行一些由C/C++编写的程序 堆:对象在这里存储,且开辟后的空间使
-
Java由浅入深细数数组的操作下
目录 1.二维数组的存储 2.二维数组的定义和初始化 3.打印二维数组 4.不规则二维数组 5.Arrays中常用的方法 上一篇介绍完一维数组后,我们来看二维数组 1.二维数组的存储 在C语言中我们说过:二维数组可以看成是特殊的一位数组,比如int arr[2][3],arr可以看成由两个元素组成,即arr[0]和arr[1],arr[0]和arr[1]各自又有三个元素,这句话在Java中同样适用,一维数组中arr存储的是一个地址,二维数组中则是多个地址,以上面的arr数组为例,其在JVM中的存
-
Java自定义长度可变数组的操作
我们都知道数组是线性的.类型固定.内存地址连续.定长的,主要是数组一旦被定义,那么它的长度也就定下来了,只能添加有限的数据.而长度可变的数组是要将这个长度打破,实现数组数据无限增加 那么定义长度可变的数组就可以用两个数组来实现数组长度的变化.为了避免每次增加数据或删除数据时都要重新开辟空间,我先设定原数组为固定长,在当数组放满时,一次增加一定的长度,这样 节省了开辟空间的时间 因为数组里的数据类型是不确定的,所以用泛型比较好 public class MyList<E> { private i
-
java旋转二维数组实例
本文实例讲述了java旋转二维数组的操作,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package test; /* * 1 2 3 4 5 * 16 17 18 19 6 * 15 24 25 20 7 * 14 23 22 21 8 * 13 12 11 10 9 * * 写一
-
Java细数IO流底层原理到方法使用
目录 一.什么是IO流 二.常用的文件操作 三.获取文件的相关信息 四.目录的操作和文件删除 五.IO流体系图-常用的类 六.FileInputStream常用方法 七.FileOutputStream常用方法 八.FileReader常用方法 九.FileWriter常用方法 一.什么是IO流 输入流和输出流. 输入流:数据从数据源(文件)到程序(内存)的路径 输出流:数据从程序(内存)到数据源(文件)的路径 二.常用的文件操作 学习目标:创建文件对象相关构造器和方法 new File(Str
-
java基础之数组常用操作总结(必看篇)
常用的对数组进行的操作 1.求数组中最大值,最小值 思路:假设下标为0的元素是最大值,遍历数组,依次跟max进行比较,如果有元素比这个max还大,则把这个值赋给max.最小值同样 public class TestArray{ public static void main(String[] args){ int[] arr={23,45,234,576,34,87,34,12,67}; int max=arr[0]; int min=arr[0]; for(int i=0;i<arr.leng
-
细数java中Long与Integer比较容易犯的错误总结
今天使用findbugs扫描项目后发现很多高危漏洞,其中非常常见的一个是比较两个Long或Integer时直接使用的==来比较. 其实这样是错误的. 因为Long与Ineger都是包装类型,是对象. 而不是普通类型long与int , 所以它们在比较时必须都应该用equals,或者先使用longValue()或intValue()方法来得到他们的基本类型的值然后使用==比较也是可以的. 但是有一种特殊情况, 其实Long与Integer都将 -128~127 这些对象缓存了. 可以看看Long类
-
细数Java接口的概念、分类及与抽象类的区别
Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 一.接口含义: 1.Java接口,Java语言中存在的结构,有特定的语法和结构: 2.一个类所具有的方法的特征集合,是一种逻辑上的抽象. 前者叫做"Java接口",后者叫做"接口". Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所
随机推荐
- C语言递归实现线索二叉树
- Python help()函数用法详解
- 判断Session的过期时间 采用JavaScript实时显示剩余多少秒
- Java多线程之异步Future机制的原理和实现
- 对学Oracle数据库初学者的开场篇
- 浅谈js基本数据类型和typeof
- Server.HTMLEncode让代码在页面里显示为源代码
- Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
- PHP实现克鲁斯卡尔算法实例解析
- mysql 读写分离(基础篇)
- JavaScript中的replace()方法使用详解
- PHP中include和require的区别实例分析
- JavaScript html5 canvas绘制时钟效果(二)
- Golang极简入门教程(三):并发支持
- C#简单实现SNMP的方法
- WebApi+Bootstrap+KnockoutJs打造单页面程序
- PHP函数rtrim()使用中的怪异现象分析
- 查找iframe里元素的方法可传参
- 根据当前时间在jsp页面上显示上午或下午
- 使用代码验证linux子进程与父进程的关系