数组定义及初始化

数组这玩意是一种用于存放数据最常见数据结构。

数组的的概念及注意点

  • 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一。
  • 数据类型既可以是基本类型也可以是引用类型,类里虽然有不同对象,但都属于同一类,也可存于数组。
  • 数组就是一种引用类型。
  • 数组一旦初始化完成,长度就已经确定,所占内存空间也被固定且不能改变,把数据删除也没用。

数组的定义

// 定义数组
char[] initArrays;
char initArrays1[];
  • 两者都可以定义一个数组,但建议使用第一种,也就是type[] arrayname,因为具有较好的可读性,让人一看就知道是个char[]类型的。
  • 仅仅定义了一个引用对象,且并没有指向任何的内存,所以暂时是不能使用的,需要对它初始化

数组的初始化

形式

  • 静态初始化
//静态初始化
char[] initArrays0;
initArrays0 = new char[]{'1','2'};
//char[] initArrays0= {'1','2'};

静态初始化需要人为显式指定每个数组元素的初始值,由系统决定数组长度。

type[] arrayname={element1,element2...};是上面两条语句的对于数组静态初始化的简化语法格式。

注意数组元素由花括号扩起,且由逗号分隔。

  • 动态初始化
//动态初始化
int[] arrays;
arrays = new int[3];
//int[] arrays = new int[3];

动态初始化是人为指定数组长度,由系统为数组元素分配初始值。

同样,动态初始化也有简化格式:type []arrayname = new int[length];

注意方括号内需指定数组的长度。

一旦为数组的每个元素数组分配了内存空间,每个内存空间里存储的内容就是该元素的值,即使内容为空,也是null值,所以不论哪种方式初始化数组,都会使数组元素获得初始值。只不过初始值的获得的方式不一样罢了,一个是人给的,一个是系统给的。

动态分配的初始值

既然动态初始化数组只需要指定每个元素所需的内存空间,由系统为各个元素赋初值,那么,这些初值系统又是如何来赋予的呢。以下是对各个不同类型的数组赋初值的尝试:

int[] arrays = new int[3];
boolean[] arrays1 = new boolean[3];
String[] arrays2 = new String[3];
float[] arrays3 = new float[3];
char[] arrays4 = new char[3];
System.out.println(arrays[0]);//0
System.out.println(arrays1[0]);//false
System.out.println(arrays2[0]);//null
System.out.println(arrays3[0]);//0.0
System.out.println(arrays4[0]);//输出'\u0000'为空
}

再根据查找资料,做出总结:

  • 整数类型(byte,short,int,long)->0;
  • 浮点类型(float,double)->0.0;
  • 字符类型(char) ->'\u0000';
  • 布尔类型(boolean) ->false;
  • 引用类型(类,接口,数组)->null;

通向Java深入:Java数组深入理解

小tips:关于输出'\u0000'为空引发的思考:Java 中各种空(""、\u0000、null)的区别?

Java数组定义及初始化的更多相关文章

  1. Java数组一定要初始化才能使用吗?

    数组是大多数编程语言提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组.Java语言的数组变量是引用类型的变量,因此具有Java独有的特性. 在正常的Java开发中,使用Ja ...

  2. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  3. Java数组声明、初始化

    维数组的声明方式:type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 ...

  4. 200-Java语言基础-Java编程入门-006 | Java数组定义及使用(引用数据类型)

    一.数组概述和定义格式说明 为什么要有数组(容器): 为了存储同种数据类型的多个值 数组概念: 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引 ...

  5. C++中数组定义及初始化

    一.一维数组 静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态 int array[100] = {1,2}: 定义并初始化了数组array 动态 int* ar ...

  6. C# 、Java数组申明、初始化区别

    一.数组申明   int[] a1 int a2[] C# 支持 不支持 Java 支持 支持 二.数组申明且初始化    int[] a1 = new int[] { 2, 31 } int a1[ ...

  7. Java 数组声明与初始化

    引言 学习了好久的java,每次要写数组的声明和初始化代码,总是理不清.最近又碰到了一次这种情况.这次拿出<Thinking In Java>好好总结一翻. 数组声明 对于数组的声明其实都 ...

  8. Java数组填充和初始化

    Java中,如何填充(一次初始化)数组? 示例 此示例使用Java Util类的Array.fill(arrayname,value)方法和Array.fill(arrayname,starting ...

  9. verilog数组定义及其初始化

    这里的内存模型指的是内存的行为模型.Verilog中提供了两维数组来帮助我们建立内存的行为模型.具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问.这 ...

随机推荐

  1. Vue 的准备

    ## .es6的基本语法 ​ let---是局部作用于,不会存在变量提升,变量不能重复声明 ​ const--局部作用域,不会存在变量提升 不能重复声明,只声明常亮,不可变的量 ​ ```javasc ...

  2. Prometheus(二):Prometheus 监控Windows机器

    一.安装wmi-exporter 首先在需要监控的Windows机器上安装wmi_exporter.wmi_exporter下载地址:https://github.com/martinlindhe/w ...

  3. PHP Windows下使用Memcached扩展

    github上发现了一个很好用的小文件,能够 模拟出php_memcached.dll的PHP memcached扩展. PHP memcached client 已知PCEL有两个memcache ...

  4. Java并发入门之FutureTask

    Java并发入门之FutureTask 前言: 最近遇到一个项目需要上传图片到服务器,API要求是二进制流,那就跑慢点一点点上传. 于是对多线程从没有应用过的我,决定拿多线程直接应用于代码. 应用Ex ...

  5. Pyhton网络爬虫之CrawlSpider

    一.什么是CrawlSpider? 在学习CrawlSpider之前如果我们想爬取某网站前100页的内容的话,我们可以使用的方法是通过Request模块手动发起请求,递归调用parse方法,写起来非常 ...

  6. JVM内存结构、参数调优和内存泄露分析

    1. JVM内存区域和参数配置 1.1 JVM内存结构 Java堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都 ...

  7. 指定路径批量将xls转换成csv

    PS : 用到spire库,.net控制台应用程序 其实本来没打算写这个工具的,只是最近需要用到,手头上正好没有这样的工具,那么怎么办,写呗! 其实说白了就是省事,策划想怎么玩,把表把工具丢给他,省得 ...

  8. loadrunner常用web动作函数

    web_custom_request  ---允许使用任何http请求方法 脚本一: web_custom_request("baidu_request","URL=ht ...

  9. CSPS模拟 97

    越来越弱了, 而且不如之前积极了,非常的颓废. 联赛前出现这种问题也是够我受的. T1 打表找规律失败.jpg 一直在找多项式规律,没找指数规律. T2 唉. T3 考虑到最多有n种颜色,考虑在线段树 ...

  10. NOIP模拟27

    两个机房又和在一起考试 开场看了看T1,感觉挺水的,过. T2,这个式子有点奇怪,暂时没什么思路,过 T3,好像保留最后几位换个根处理一下就行了,过,先去打T1 于是T1大概打了0.5h,连暴力带正解 ...