首页 > 编程语言 >Java创建数组、赋值的四种方式,声明+创建+初始化 详解

Java创建数组、赋值的四种方式,声明+创建+初始化 详解

时间:2024-03-17 18:11:59浏览次数:22  
标签:初始化 Java int 创建 元素 数组 new

@

目录

一、创建数组的四种方式

以int数据类型为例

@Test
public void testNewArray() {
    //创建数组

    //法一
    int[] arr1 = new int[]{1,2,3,4,5};
    System.out.println(arr1.length + "   " + arr1[2]);   //5   3
    //Arrays.toString(Object[])  将数组的元素生成字符串,数组的各个元素使用方括号括着 [ ]
    System.out.println(Arrays.toString(arr1));   //[1, 2, 3, 4, 5]

    //法二 声明、分配空间并赋值
    int[] arr2 = {1,2,3,4};
    System.out.println(arr2.length + "   " + arr2[2]);   //4   3

    //法三 声明数组时指定元素个数,然后赋值。此时所有的元素值均为0
    int[] arr3 = new int[4];
    System.out.println(arr3.length + "   " + arr3[3]);  //4   0

    //法四 声明数组名、开辟空间、赋值
    int[] arr4;
    arr4 = new int[]{0,1,2,3};
    System.out.println(arr4.length + "   " + arr4[2]);   //4   2

    //创建多维数组
    int[][] doubleArr1 = {{1,2,3},{4,5,6},{7,8,9}};
    int m = 3, n = 4, q = 5;
    int[][] doubleArr2 = new int[m][n];  //其中n可以省略
    int[][][] tArr = new int[m][n][q];   //其中n、q可以省略
}

注意:

  • new 数据类型[]{},其中花括号可以省去,但要在[ ]中填写数组的个数;
  • 创建多维数组时 new后面第一个方括号中的元素数量不能省略

二、详解

1、一维数组的声明方式:

type[] arrayName; 或 type arrayName[];

推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不是type类型。建议不要使用第二种方式

int[] intArr;

注:Java语言中声明数组时不能指定其长度(数组中元素的个数),这是因为数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定一个了一个指针),这个引用变量还未指向任何有效的内存,所以定义数组时不能指定数组的长度。而且由于定义数组仅仅只是定一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有在数组进行初始化后才可以使用。

2、一维数组的创建

Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数]

// 创建数组,如果在创建的同时不初始化数组则必须指定其大小
intArr = new int[5];
// 创建数组时,不指定数组大小则必须在创建的同时初始化数组
intArray1 = new int[]{0,1,2};
  • 一旦使用new关键字为数组分配了内存空间,每个内存空间存储的内容就是数组元素的值,也就是数组元素就有了初始值,即使这个内存空间存储的内容是空,这个空也是一个值null。也就是说不可能只分配内容空间而不赋初始值,即使自己在创建数组对象(分配内容空间)时没有指定初始值,系统也会自动为其分配
  • 基础数据类型的包装类,其默认的初始化值均为null,因为基础数据类型的包装类创建的数组属于引用数组(对象数组),对象数组默认的初始化值都是null。

3、一维数组的初始化

数组的初始化分为静态初始化、动态初始化和默认初始化:

  • 静态初始化是数组在初始化时由程序员显式指定每个数组元素的初始值而数组长度由系统决定。
  • 动态初始化是数组在初始化时只指定数组长度,由系统为数组元素分配初始值。
//a、数组静态初始化的语法格式:
arrayName = new type[]{element1,element2,element3...};
// 或者使用简化的语法格式:
arrayName = {element1,element2,element3...}

//b、数组动态初始化的语法格式:
arrayName = new type[length];

附:静态初始化时不能指定元素个数,而动态初始化时则必须指定元素个数。静态初始化时数组能够知道元素的个数所以不需要指定,而动态初始化时数组元素个数未知 因此必须指定。

// 静态初始化
int intArray2 [] = new int []{20,21,22};
// 静态初始化简化方式
int intArray3 [] = {30,31,32};

// 动态初始化
int [] intArray4 = new int [3];           
// 错误写法:静态初始化不能指定元素个数
// int intErrorArray5[] = new int[3]{50,51,52};
// 错误写法:动态初始化必须指定元素个数
// int intErrorArray6[] = new int[];

注:一维数组这一块记住两点,数组声明的时候是不能指定大小的,也就是说等号左边的中括号中不能包含数字。另外一旦使用new关键字那么肯定在内存中为数组分配了空间,则必然数组有默认值。数组是对象数据类型
注:不要静态初始化和动态初始化同时使用,也就是说不要再进行数组初始化时,既指定数组长度,也为每个数组元素分配初始值。
4、数组进行动态初始化时系统分配初始值的规则

  • 数组元素类型是基本类型中的整数类型(byte、short、int、long),则数组元素的初始化默认值是0
  • 数组元素类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0
  • 数组元素类型是基本类型中的字符类型(char),则数组元素的值是'\u0000'
  • 数组元素类型是基本类型中的布尔类型(boolean),则数组元素的值是false
  • 数组元素类型是基本类型中的引用类型(类、接口、数组),则数组元素的值是null

详情见https://blog.csdn.net/qq_44700578/article/details/136323990

三、数组存储的弊端

  • 一旦初始化,其长度就不可修改,长度不够用、开辟很大的长度会导致空间浪费
  • 数组中提供的方法非常有限。添加、删除、插入等操作 效率很低【为了保证元素的内存地址连续,添加或删除元素时,涉及到前移或者后移】
  • 扩容麻烦,只能新建一个更大的数组,将元素一个一个移进去,效率低
  • 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
  • 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足

为解决以上问题、灵活运用,提出Java容器的概念

参考https://blog.csdn.net/u014199097/article/details/50551731

标签:初始化,Java,int,创建,元素,数组,new
From: https://www.cnblogs.com/qhhfRA/p/18078912

相关文章

  • java参数类型详细介绍(简单易懂)
    目录1、参数类型分布图1.1浮点型1.2 字符型char 1.2.1 char大小1.3字符串:(String-不可变字符串)1.3.1Jvm内存图1.3.2开辟空间个数注意1.3.3使用==时注意1.3.4字符串拼接举例 1.3.5String常见的方法1.4字符串:(StringBuffer-可变字符串、StringBuilder-可变......
  • Java学习笔记:字符串
    目录Java学习笔记:字符串String创建String对象内存模型String比较Scanner验证键入的字符串本质是new出来的练习案例:判断账户和密码是否一致遍历字符串统计字符次数字符串反转StringBuilderStringBuilder构造方法链式编程拼接字符串StringJoiner总结必须学习使用JDKAPI帮助文档​......
  • Java学习笔记:字符串
    Java学习笔记:字符串Java学习笔记:字符串String创建String对象内存模型String比较Scanner验证键入的字符串本质是new出来的练习案例:判断账户和密码是否一致遍历字符串统计字符次数字符串反转StringBuilderStringBuilder构造方法链式编程拼接字符串StringJoiner总结必须......
  • web后端-java框架-spring Boot
    springBootweb入门:1)创建springboot工程此处我使用的jdk版本为11,在选择版本时,如果服务器URL为https://start.spring.io ,那么java下拉选项中只有17或者21,因此将服务器URL为https://start.aliyun.com\即可点击下一步,将springWeb依赖添加进去。HTTP协议:1)请求协议: 2)......
  • 滴水逆向笔记系列-win32总结7-57.进程创建-58.挂起方式创建进程
    第五十七课win32进程创建1.进程创建的过程父进程创建子进程,父进程挂了子进程不会挂0x00程序、imagebuffer、进程的关系程序就是一个普通的二进制文件;imagebuffer就是程序拉伸到内存后的二进制文件,但是没有线程去执行他,进程则是有线程去运行这个imagebuffer0x01过程......
  • JavaScript基础 —— 学习 第四天(完结)
    一、对象(一)对象介绍对象:object是JavaScript里面的一种数据类型可以看作一种无序的数据的集合可以详细的描述某个事物null是空对象对象是由属性和方法组成的属性:手机特征大小颜色什么的方法:能进行的一些行为手机打电话<body><script>let对象名={......
  • java学习day1
    ideaJava快捷键psvm生成一个main方法sout输出注释//单行注释/**/多行注释/***/JavaDoc文档注释关键字![3113a776e87bce62993b5ccd4a02801](C:\Users\lenovo\Documents\WeChatFiles\wxid_ulswcuy83w1m22\FileStorage\Temp\3113a776e87bce62993b5ccd4a02801.png)......
  • 【Java面试题-基础知识03】Java线程连环问
    1、Java中的线程是什么?在Java中,线程是程序执行流的最小单元。每个Java程序都至少有一个主线程,也称为主执行线程,它是程序开始执行时自动创建的。除了主线程外,程序员还可以创建额外的线程来执行并发任务。2、创建线程的方式有哪些?Java中的线程由java.lang.Thread类表示,可以通过两......
  • JavaWeb - HTML基础
    常用标签font文本标签<fontface="黑体"color="#0099FF">黑体效果</font><fontsize="3"color="#990000">3号文字效果</font><!--face=字体样式,color=颜色,size:字体大小-->p段落标签、br换行标签本段落内容...<p>第二段内容<......
  • Java学习七之类和接口
    抽象类抽象类概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。比如:在打印图形例子中,我们发现,父类Shape中的draw方法好像并没有什么实际工......