Java-数组和可变参数

1.数组的概述

数组指的是一种容器,可以用来存储同种数据类型的多个值

数组容器在存储数据的时候,需要结合隐式转换来考虑,建议容器的类型和存储的数据类型保持一致

2.数组的定义

格式一:

数据类型\[\] 数组名 int \[\] arra

格式二:

数据类型 数组名 \[\] int array\[\]

比如:

java 复制代码
        int[] a = new int[]{};
        int b[] = new int[]{};

一般格式一使用的多。

3.数组的静态初始化

完整格式:

数据类型\[\] 数组名 = new 数据类型\[\] {元素1,元素2,.....};

简化格式:数据类型\[\] 数组名 = {};

测试:

java 复制代码
        int[] a = new int[]{1,2,3};
        // 简写
        int[] b = {1,2,3};

4.获取数组里的元素

格式:

组名索引/下标 注意数组下标从0开始

测试:

java 复制代码
        int[] a = new int[]{1,2,3};
        // 简写
        int[] b = {1,2,3};
        int q = b[0];
        System.out.println(q);

5.把数据存储到数组当中

格式:

数组名索引 = 具体数据/变量

测试;

java 复制代码
        // 简写
        int[] b = {1,2,3};
        b[0] = 100;
        System.out.println(b[0]); // 100

其实就是覆盖,一旦覆盖后,原来的数据就不存在

6.数组遍历

两种方法,即普通for和for-each

视情况使用。

java 复制代码
        int[] b = {1,2,3};
        // 普通for
        for (int i = 0; i < b.length; i++) {
            System.out.println(b[i]);
        }
        // for-each,不能操作索引
        for (int i : b) {
            System.out.println(i);
        }

7.数组的动态初始化

格式:

数据类型\[\] 数组名 = new 数据类型数组的长度

在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值

数组默认初始化值的规律:

整数类型:默认初始化值0

小数类型:默认初始化值0.0

字符类型:默认初始化值'/u0000' 空格

布尔类型:默认初始化值false

引用数据类型:默认初始化值null

测试:

java 复制代码
package org.example;

public class Test {
    public static void main(String[] args) {
        int[] a = new int[5];
        for (int i : a) {
            System.out.println( i);
        }
    }


}

结果:

8.数组常见问题

当访问了数组中不存在的索引,就会引发索引越界异常

比如修改for循环条件:

java 复制代码
        int[] b = {1,2,3};
        // 普通for
        for (int i = 0; i <= b.length; i++) {
            System.out.println(b[i]);
        }

结果:

9.可变参数

9.1.语法

可变参数:方法的形参的个数是可以发生变化的,是一个数组

格式:

属性类型...名字

细节:

在方法的形参中最多只能写一个可变参数

可变参数必须放在形参的最后

java 复制代码
public class Test {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3};
        test1(a);

    }
    public static void test1(int...arr){
        for (int i : arr) {
            System.err.println(i);
        }
    }


}

正常输出123

你提供的代码片段非常典型,它展示了可变参数的基本用法。下面我将为你详细解析数组和可变参数的区别,以及为什么我们需要可变参数。

可变参数(Varargs)本质上是编译器提供的一种"语法糖"

在方法内部,可变参数 int... arr 完全被当作一个 int[] arr 数组来处理。可以对它进行遍历、获取长度等操作,就像操作普通数组一样。

编译器在编译时,会自动将可变参数转换为数组类型。

但是可变参数想对于数组较**灵活,**可以传入多个独立参数,也可以直接传入一个数组。

java 复制代码
public class Test {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3};
        test1();
        test1(1,2,3);

    }
    public static void test1(int...arr){
        for (int i : arr) {
            System.err.println(i);
        }
    }

}

结果:

9.2.可变参数的优势

1.避免繁琐的数组创建

在没有可变参数之前,如果你想调用一个方法处理一组不确定的数字,比如计算 1, 2, 3, 4, 5 的和,你必须写成 sum(new int[]{1, 2, 3, 4, 5})。这非常冗长。

有了可变参数,你可以直接写成 sum(1, 2, 3, 4, 5)。

2.替代大量的重载方法

假设你需要一个方法来打印不同数量的参数,在没有可变参数时,你可能需要写一堆重载方法:

java 复制代码
// 没有可变参数时,需要大量重载
void print(int a) { ... }
void print(int a, int b) { ... }
void print(int a, int b, int c) { ... }
// ... 以此类推,代码冗余且难以维护

使用可变参数,一个方法就能搞定所有情况:

java 复制代码
// 使用可变参数,一个方法即可
void print(int... numbers) { ... }
相关推荐
就叫_这个吧2 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡2 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管2 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅2 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒2 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰3 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
今天AI了吗4 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
TELL5214 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
动词ing5 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习5 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展